core dump小总结
2011-08-02 14:10 后端技术 阅读(762) 评论(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的大小没有限制,很有可能产出上G的core文件。
四、 调试core文件
core文件是记录程序crash现场的证据,我们可以通过调试core文件来重现程序当时的现场。使用gdb,按照gdb –c core.pid program_name的方式执行,gdb启动后,输入命令bt或者where,gdb就会把程序crash时的函数调用情况打印出来,我们可以通过函数调用情况找到可能出现的函数和对应的行数,进而进行一下的排查。
采用bt或where的方式打印出的信息可能不会很完整,这时候就需要比较高级的调试方式,这方面的能力还需要提高,当前的功力还不够。
五、 小结
程序莫名crash了,我们会很蛋疼,如果没有产生core,我们就更蛋疼了!有了core文件就需要好好利用,调试的功力很重要,这点后面需要努力提高!