您的位置:首页 > 运维架构 > Linux

Linux core dump调试

2015-04-30 15:19 429 查看
在Linux系统中,当程序运行的过程中异常终止或者崩溃时,OS会将程序当时的内存状态记录下来保存到一个文件中,这就是core dump。当程序崩溃时会在指定目录下生成一个core文件,core文件仅仅是一个内存映象,同时加上了崩溃程序的调试信息,用来调试定位问题,借助core
dump来诊断和调试程序。

1.Ubuntu系统测试
(1) 编写产生异常终止的程序

#include <stdio.h>

int main(void)

{

int* null_pionter = 0;

*null_pointer= 0;

return 0;

}

(2) 编译并运行程序,程序执行过程中出现段错误导致程序崩溃。






(3) 查看是否有core文件生成,从实际测试结果可以看出,并没有core文件产生,这是什么原因呢?这是由于Ubuntu系统默认不会生成core dump文件。






2.在Linux下打开Core Dump
使用ulimit –a命令查看系统的core file size设定参数,发现corefile size的设定值为0,因此异常时默认是不会生成coredump文件。





让系统在异常错误时产生core文件,需要设置core file的size设置为一个不为0的值。使用命令ulimit –c 1024将其设置为1024个blocks。





使用 gcc
编译源文件,加上-g以增加调试信息。执行dump程序后,使用ls查看是否有core文件生成。测试结果core文件已经生成。






用gdb查看core文件的内容,使用命令gdb dump core命令来定位程序中引发core
dump地方。



程序在最后崩溃位置在dump.c
第6行的代码,并列出了该行代码。






3.修改core文件保存名称

由于默认生成的 core
文件保存在可执行文件所在的目录下,文件名就为 core,同一目录下相同文件名的core容易被覆盖。通过修改
/proc/sys/kernel/core_uses_pid文件可以让生成 core
文件名是否自动加上pid
。例如 echo 1 >/proc/sys/kernel/core_uses_pid
,生成的core
文件名将会变成 core.pid,其中
pid 表示该进程的 PID。





运行dump程序,查看生成的core dump文件已经加上了进程PID,如下图红框所示。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: