代码改变世界

core dump小总结

2011-08-02 14:10  后端技术  阅读(760)  评论(0编辑  收藏  举报

一、      core dump简介

当程序因为异常终止(崩溃)时,操作系统会一个程序在特定时间内进程中运行信息的状态dump出来。一般会产生一个core文件,用于记录包括程序计数器,堆栈信息及其他信息,core文件主要用于记录程序crash的现场信息,为程序调试程序提供了物证。core dump时会产生诸如core.pid的文件。

二、      core产生的原因

   core文件产生的原因非常多,可能因为硬件故障,更有可能因为程序中的错误,比较普遍的有:内存访问越界,无效指针,堆栈溢出等。当然还有其他的原因,这里就不追究全面了。

三、      控制core文件

   有时候程序down, 但是core文件却没有生成。core文件的生成跟你当前系统的环境设置有关系,可以利用ulimit –c测试一下当前系统设置的core文件的大小,如果返回0表示core文件大小为0,也就不会产生core文件。

    可以采用ulimit –c 1000设置core文件的大小,如果感觉还不过瘾可以采用如下命令ulimit –c unlimit,这个命令告诉系统对于core的大小没有限制,很有可能产出上Gcore文件。

四、      调试core文件

core文件是记录程序crash现场的证据,我们可以通过调试core文件来重现程序当时的现场。使用gdb,按照gdb –c core.pid program_name的方式执行,gdb启动后,输入命令bt或者wheregdb就会把程序crash时的函数调用情况打印出来,我们可以通过函数调用情况找到可能出现的函数和对应的行数,进而进行一下的排查。

采用btwhere的方式打印出的信息可能不会很完整,这时候就需要比较高级的调试方式,这方面的能力还需要提高,当前的功力还不够。

五、      小结

    程序莫名crash了,我们会很蛋疼,如果没有产生core,我们就更蛋疼了!有了core文件就需要好好利用,调试的功力很重要,这点后面需要努力提高!