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) 编译并运行程序,程序执行过程中出现段错误导致程序崩溃。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5D/wKioL1SAOieRnmOpAAFbf0gSVtY781_small.jpg)
(3) 查看是否有core文件生成,从实际测试结果可以看出,并没有core文件产生,这是什么原因呢?这是由于Ubuntu系统默认不会生成core dump文件。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M02/54/5E/wKiom1SAOZujndBLAADEa6uae7k285_small.jpg)
2.在Linux下打开Core Dump
使用ulimit –a命令查看系统的core file size设定参数,发现corefile size的设定值为0,因此异常时默认是不会生成coredump文件。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5E/wKiom1SAOZrgjwpuAAKxnTD63gc079.jpg)
让系统在异常错误时产生core文件,需要设置core file的size设置为一个不为0的值。使用命令ulimit –c 1024将其设置为1024个blocks。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M02/54/5D/wKioL1SAOiiwodn6AAL4jsPqTkg423.jpg)
使用 gcc
编译源文件,加上-g以增加调试信息。执行dump程序后,使用ls查看是否有core文件生成。测试结果core文件已经生成。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M00/54/5D/wKioL1SAOiixhQG6AAGI0z_HNmI173_small.jpg)
用gdb查看core文件的内容,使用命令gdb dump core命令来定位程序中引发core
dump地方。
![](http://s3.51cto.com/wyfs02/M00/54/5E/wKiom1SAOZqy3FWAAABXydGqGJA208.jpg)
程序在最后崩溃位置在dump.c
第6行的代码,并列出了该行代码。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5D/wKioL1SAOiiiy8WFAAKvIAcSA5s184_small.jpg)
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。
![](http://s3.51cto.com/wyfs02/M02/54/5D/wKioL1SAOijjg6PwAACH-eYWEKc679_small.jpg)
运行dump程序,查看生成的core dump文件已经加上了进程PID,如下图红框所示。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5E/wKiom1SAOZviHpw9AAFOXATjZl4057_small.jpg)
dump来诊断和调试程序。
1.Ubuntu系统测试
(1) 编写产生异常终止的程序
#include <stdio.h>
int main(void)
{
int* null_pionter = 0;
*null_pointer= 0;
return 0;
}
(2) 编译并运行程序,程序执行过程中出现段错误导致程序崩溃。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5D/wKioL1SAOieRnmOpAAFbf0gSVtY781_small.jpg)
(3) 查看是否有core文件生成,从实际测试结果可以看出,并没有core文件产生,这是什么原因呢?这是由于Ubuntu系统默认不会生成core dump文件。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M02/54/5E/wKiom1SAOZujndBLAADEa6uae7k285_small.jpg)
2.在Linux下打开Core Dump
使用ulimit –a命令查看系统的core file size设定参数,发现corefile size的设定值为0,因此异常时默认是不会生成coredump文件。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5E/wKiom1SAOZrgjwpuAAKxnTD63gc079.jpg)
让系统在异常错误时产生core文件,需要设置core file的size设置为一个不为0的值。使用命令ulimit –c 1024将其设置为1024个blocks。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M02/54/5D/wKioL1SAOiiwodn6AAL4jsPqTkg423.jpg)
使用 gcc
编译源文件,加上-g以增加调试信息。执行dump程序后,使用ls查看是否有core文件生成。测试结果core文件已经生成。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M00/54/5D/wKioL1SAOiixhQG6AAGI0z_HNmI173_small.jpg)
用gdb查看core文件的内容,使用命令gdb dump core命令来定位程序中引发core
dump地方。
![](http://s3.51cto.com/wyfs02/M00/54/5E/wKiom1SAOZqy3FWAAABXydGqGJA208.jpg)
程序在最后崩溃位置在dump.c
第6行的代码,并列出了该行代码。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5D/wKioL1SAOiiiy8WFAAKvIAcSA5s184_small.jpg)
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。
![](http://s3.51cto.com/wyfs02/M02/54/5D/wKioL1SAOijjg6PwAACH-eYWEKc679_small.jpg)
运行dump程序,查看生成的core dump文件已经加上了进程PID,如下图红框所示。
![](http://bbs.51cto.com/images/default/attachimg.gif)
![](http://s3.51cto.com/wyfs02/M01/54/5E/wKiom1SAOZviHpw9AAFOXATjZl4057_small.jpg)
相关文章推荐
- linux core dump配置与调试
- 调试技术: Linux core dump file
- linux偶发性崩溃的程序该怎么调试 coredump gdb
- linux coredump调试
- Linux core dump的调试技术
- linux coredump调试,ulimit设置
- Linux core dump的调试技术
- Linux core dump的调试技术
- 转载_Linux core dump file详解及使用GDB调试Coredump文件
- 调试技术: Linux core dump file
- linux coredump配置与调试
- Linux core dump的调试技术(2)
- LINUX core dump详解 & GDB调试
- 调试技术: Linux core dump file
- 调试技术: Linux core dump file
- linux coredump调试
- Linux应用程序调试--debug coredump
- Linux生成dumpcore并进行调试,以及addr2line的用法
- linux gdb 调试 coredump core 文件,函数名称是 问号