Linux使用笔记: 定制core dump文件的文件名
Posted 莫水千流
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux使用笔记: 定制core dump文件的文件名相关的知识,希望对你有一定的参考价值。
在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因。缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要使用ulimit命令更改coredump的设置:
ulimit -c unlimited
上面的命令表示在程序异常时产生core dump文件,并且不对core dump文件的大小进行限制。
上述设置只是使能了core dump功能,缺省情况下,内核在coredump时所产生的core文件放在与该程序相同的目录中,并且文件名固定为core。很显然,如果有多个程序产生core文件,或者同一个程序多次崩溃,就会重复覆盖同一个core文件。
我们通过修改kernel的参数,可以指定内核所生成的coredump文件的文件名。例如,Easwy使用下面的命令使kernel生成名字为core.filename.pid格式的core dump文件:
echo ‘core.%e.%p‘ > /proc/sys/kernel/core_pattern
这样配置后,产生的core文件中将带有崩溃的程序名、以及它的进程ID。上面的%e和%p会被替换成程序文件名以及进程ID。
可以在core_pattern模板中使用变量还很多,见下面的列表:
- %% 单个%字符
- %p 所dump进程的进程ID
- %u 所dump进程的实际用户ID
- %g 所dump进程的实际组ID
- %s 导致本次core dump的信号
- %t core dump的时间 (由1970年1月1日计起的秒数)
- %h 主机名
- %e 程序文件名
如果在上述文件名中包含目录分隔符”/“,那么所生成的core文件将会被放到指定的目录中。
需要说明的是,在内核中还有一个与coredump相关的设置,就是/proc/sys/kernel/core_uses_pid。如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。
对所生成的core dump进程分析,需要使用调试工具,例如GDB等。可以参见Easwy的其它文章。
以上是关于Linux使用笔记: 定制core dump文件的文件名的主要内容,如果未能解决你的问题,请参考以下文章
Linux:段错误(核心已转储) Segmentation fault (core dumped)(在Linux上如何得到一个段错误的核心转储)(笔记)(未完成,暂停)
C++笔记-解决Linux上Qt程序一运行就core dumped(思路)