一、coredump是什么
我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。
通常情况下,core文件包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,可理解为是程序工作当前状态存储生成的第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题并进行及时解决。
1.1 coredump的存储位置
core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core,查看core文件的存在位置: cat /proc/sys/kernel/core_pattern。 缺省值是core
1.2产生coredump的一些条件
- 需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需进行修改设置。
- 以产生coredump且不受大小限制:ulimit -c unlimited
- 指定字符大小:ulimit –c [size]
1.3Linux 下的core dump的配置与调试
(1)命令行输入查看信息
- cat /proc/sys/kernel/core_uses_pid
- cat /proc/sys/kernel/core_pattern
1)/proc/sys/kernel/core_uses_pid可控制core文件的文件名中是否添加pid作为扩展。1:添加pid作为扩展名,生成的core文件格式为core.xxxx;0:生成的core文件同一命名为core。
2)/proc/sys/kernel/core_pattern控制core文件保存位置和文件名格式。生成的coredump保存在/odsp/help/coredump/core-%e-%p 产生的文件名为core-命令名(%e)-pid(%p)
(2)查看是否有coredump信息
- ll /odsp/help/coredump/
(3)对coredump文件解压缩
- tar zxf 文件名
(4)用gdb查看coredump文件
- gdb 【exec file】 【core file】
- /odsp/webservice/axis/bin/axis2_http_server这个exec file来查看
- gdb /odsp/webservice/axis/bin/axis2_http_server core-axis2_http_serv-22349
如:解压后的coredump文件名为 core-axis2_http_serv-22349 core-axis2_http_serv-25561 在前面已经介绍了coredump的命名规则:core-%e-%p axis2_http_serv为命令名 22349为pid 其中%e决定着用什么样的exec file来查看 core file axis2_http_serv说明这个是webservice引起的coredump,那么就用 /odsp/webservice/axis/bin/axis2_http_server这个exec file来查看
1.4prv_task_dmn相关的coredump文件查看
gdb /odsp/bin/replica_task_dmn core-prv_task_dmn-22349
1.5 gdb的一些常用操作
gdb调试命令