欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux中生成Core Dump系统异常信息记录文件的教程

程序员文章站 2022-05-31 18:09:27
Core Dump比普通的日志文件更为强大,在服务器维护过程中非常有帮助,这里我们就来看一下Linux中生成Core Dump系统异常信息记录文件的教程,需要的朋友可以参考下... 16-06-30...

1 什么是 core dump
core dump 又叫核心转储。在程序运行过程中发生异常时,将其内存数据保存到文件中,这个过程叫做 core dump。

2 core dump 的作用
在开发过程中,难免会遇到程序运行过程中异常退出的情况,这时候想要定位哪里出了问题,仅仅依靠程序自身的信息打印(日志记录)往往是不够的,这个时候就需要 core dump 文件来帮忙了。
一个完整的 core dump 文件实际上相当于恢复了异常现场,利用 core dump 文件,可以查看到程序异常时的所有信息,变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等,定位所需要的一切信息都可以从 core dump文件获取到,能够非常有效的提高定位效率。

3 如何生成 core dump
3.1 core dump 文件生成开关
core dump 文件的生成是由core文件大小限制,linux中默认的core文件大小设置为零,也就是不生成 core dump 文件,可以使用ulimit -c命令来查看当前的core文件大小限制。
要生成 core dump 文件,只需要执行下面的命令设置core文件的大小即可(其中filesize参数的单位为kbyte):

复制代码
代码如下:

ulimit -c filesize

如果要设置core文件大小无限制(即把程序完整的运行内存都保存下来),则执行如下命令:

复制代码
代码如下:

ulimit -c unlimited

3.2 core dump 文件名设置
core dump 文件默认的名字为core,而且新的core文件会把老的覆盖,这样我们只能看到最后一次的 core dump 信息,可以通过设置core文件名称模板,使每次生成的 core dump 文件区分开来。
core dump 文件的命名规则定义在/proc/sys/kernel/core_pattern文件中,规则中还可以加入预设的变量来更好的区分core文件,支持的变量列表如下:
变量
说明
%% %字符
%p 进程id(pid)
%u 用户id(uid)
%g 用户组id
%s 触发 core dump 的信号
%t 触发 core dump 的时间(单位为秒,从 1970-01-01 00:00:00 开始计算)
%h 主机名称(主机名可以通过uname命令来查看)
%e 程序名称(无路径信息)
%e 程序的路径名称(路径中的/会被!替代)
%c core文件的限制大小值(linux 2.6.24版本后开始支持)

注:core dump 文件名的最大长度为128字节(在 linux 2.6.19 版本前,最大长度为64字节)。
例如:可以通过下面的命令,生成文件名为core-程序名称-进程id-时间的 core dump 文件:
echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern
从 linux 2.4 版本开始,提供了一种比较原始的core文件名设置方式,直接设置/proc/sys/kernel/core_uses_pid文件中的值为1,生成的core文件名中便会自动加上.pid后缀,即生成的文件名为core.pid这种形式。执行下面的命令可以设置该值:

复制代码
代码如下:

echo "1" > /proc/sys/kernel/core_uses_pid

4 如何使用 core dump
有了 core dump 文件后,可以使用gdb来加载分析,执行如下命令(假设可执行程序名称及路径为/home/hutaow/test_dump,生成的core文件名为core):

复制代码
代码如下:

gdb /home/hutaow/test_dump -c core

加载完成后,即可以在gdb中查看程序异常时的各种运行信息了(查看变量值、线程信息、调用栈、反汇编等等)。