博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的core文件去哪了
阅读量:6120 次
发布时间:2019-06-21

本文共 890 字,大约阅读时间需要 2 分钟。

  hot3.png

      最近的一次分析问题的经历促使我写了这篇文章。

      最近写了一个程序,基于开源界有名的libevent框架设计了一个服务器程序,运行在CentOS 6.3上,性能倒是不错,但是程序总在运行一段时间后消失,日志随机停在一个位置上,通过查看操作系统的日志/var/log/messages,发现了下面的内容:

Oct 31 14:02:33 CutSreen kernel: screenshot[11211]: segfault at 18 ip 000000362de6a44b sp 00007fb802fa5b20 error 4 in libstdc++.so.6.0.13[362de00000+e8000]

      毫无疑问,自己的程序crash了,错误号是4,即表示非法的读访问。

      马上想到通过core文件来定位错误,但是却没有发现我的core文件,后来就从AUPE书中找到下面几行内容,说明了为什么有时不会有core文件:

( a )进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
( b )进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;
( c )用户没有写当前工作目录的许可权;
( d )文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读

      然后就一条条检查自己的环境,发现第3条不满足!/proc/[pid]/cwd显示的目录竟然是根目录(这么设置是由于我担心文件系统的去挂载影响程序运行),我的程序运行用户对根目录没有写权限,于是就程序运行的当前目录设置为一个有写权限的目录,运行了一段时间后,core文件如期而至,问题点也找到了:程序中在多线程插入和删除STL的map时候忘记加锁了!

      唉,大意了!但是,终究还是通过拿到core文件解决了问题。然后为了确保内存方面的可靠,又使用valgrind对代码进行了一次动态分析,结果报告显示内存无泄露。程序运行了很久,一直保持稳定。

      希望自己的查错经历对大家分析问题有帮助!

转载于:https://my.oschina.net/xuhh/blog/173976

你可能感兴趣的文章
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>
构建之法阅读笔记三
查看>>
写给对前途迷茫的朋友:五句话定会改变你的人生
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>