1 coredump文件
core dump说的是操作系统执行的一个动作,当某个进程因为一些原因意外终止(crash)的时候(即一般都是在进程收到某个信号的时候),操作系统会将这个进程当时的内存信息转储(dump)到磁盘上。产生的文件就是core文件了,一般会以core.xxx形式命名。
针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式, 默认处理是coredump的信号如下:
3)SIGQUIT 4)SIGILL 6)SIGABRT 8)SIGFPE 11)SIGSEGV 7)SIGBUS 31)SIGSYS 5)SIGTRAP 24)SIGXCPU 25)SIGXFSZ 29)SIGIOT
2 coredump文件的大小与生成路径
2.1 coredump文件的大小
ulimit -c 命令可查看coredump文件的大小,当值为0时,表示不生成coredump的文件。
ulimit -c filesize 命令可设置coredump文件的大小(单位KB),而ulimit -c unlimited 则表示coredump文件大小不受限制。
2.2 coredump文件的生成路径
cat /proc/sys/kernel/core_pattern 命令可查看coredump文件的生成路径。
<1>临时修改coredump文件的生成路径
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
<2>永久修改coredump文件的生成路径
设置生成路径的参数列表:
%p - insert pid into filename 添加 pid
%u - insert current uid into filename 添加当前 uid
%g - insert current gid into filename 添加当前 gid
%s - insert signal that caused the coredump into the filename 添加导致产生 core 的信号
%t - insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
步骤1:在etc/sysctl.conf 配置文件添加一行:kernel.core_pattern = /corefile/core-%e-%p-%t
步骤2:执行命令:sysctl -p
3 使用gdb生成coredump
如果在测试过程中遇到某个进程的CPU利用率过高或者卡死而需要去调试该进程时,可以利用gdb命令生成coredump文件,然后再去调试coredump文件来定位问题。
那么如何使用gdb生成coredump文件呢?其实步骤很简单:
1>. 安装好gdb,然后使用命令 'gdb'。(假设需要调试的进程号为 21509)
2>. 使用 ‘attach 21590’命令将gdb附加到进程21509上。
3>. 使用‘gcore core_name’命令生成coredump文件core_name。
4>. 使用‘detach’命令断开连接。
5>.使用‘q’命令退出gdb。
此时,在当前目录下就会产生一个名为core_name的coredump文件。下面就可以利用gdb工具来对该coredump文件进行调试了。
注:摘自互联网