linux core dump

不打扰是莪最后的温柔 提交于 2019-12-09 17:24:15

Core dump: 在程序运行过程中异常终止或崩溃,操作系统将当时的内存状态记录下来,保存在一个文件中。

其中会包含寄存器信息(包括程序指针,栈指针等),内存管理信息,操作系统状态等信息。

linux 中默认忽略 Stop信号、Terminate信号、Ignore信号等,如果信号在默认情况下,在下列几种信号发生时

会产生core dump: SIGQUIT(quit from keyboard ), SIGILL(illegal instruction), SIGABRT(abort signal),

SIGSEGV(invalid memory reference), SIGTRAP(trace/breakpoint trap)

ctrl+z 挂起进程 SIGTSTP信号(默认为暂停进程)

ctrl+c终止进程 SIGINT信号(默认为终止进程)

ctrl+\ (默认SIGQUIT信号)产生core dump

打开core dump:

在终端输入 ulimit -c ,输出为0,说明默认是关闭core dump的

输入 ulimit -c unlimited 开启core dump功能,并且不限制core dump文件的大小,如果要限制文件大小,

将unlimited改成需要的文件大小,单位为blocks(KB)

以上命令支队当前终端有效,如果永久有效,可以修改/etc/security/limits.conf文件,

增加一行:

#<domain> <type> <item> <value>

     *               soft        core      unlimited

修改core保存文件的路径

默认生在的core文件在可执行文件所在的目录下,文件名为core

通过修改/proc/sys/kernel/core_uses_pid文件可以让生成的core文件名是否自动加上pid号

如 echo 1> /proc/sys/kernel/core_uses_pid,生成的core文件名将会变成core.pid,其中pid表示进程的pid

通过修改 /proc/sys/kernel/core_pattern 来控制生成的core文件生成的路径和保存格式

如用echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern 设置成core-命令名-pid-时间戳


gdb调式

gdb program core 来查看core文件,其中program为可执行程序名,core为生成的core文件名。










易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!