首页 > 学院 > 开发设计 > 正文

C代码的coredump

2019-11-08 20:25:35
字体:
来源:转载
供稿:网友

要点:

程序异常终止之后会生成core代码文件程序添加-g编译选项,从而包含调试信息结合gdb和coredump文件定位异常点

程序异常终止之后会生成coredump文件,不同的系统、不同的设置,这个自动生成的coredump文件也不一样。

示例代码:

#include <stdio.h> int core_dump() {    int i;     for (i = 5; i >= 0; i--) {        PRintf("(%d, %d)/n", i, 100 / i);    }     return 0;} int main() {    core_dump();     return 0;}以上代码存在除0异常,编译运行:

gcc -g core_dump.c -o core_dump./core_dump运行结果:

(5, 20)(4, 25)(3, 33)(2, 50)(1, 100)[1]    9662 floating point exception (core dumped) 为了更清楚地找到代码出错的地方,可以使用gdb来分析coredump文件:
~/examples/cpp/core_dump % gdb ./a.out coreGNU gdb (GDB) 7.7Copyright (C) 2014 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http: gnu.org="" licenses="" gpl.html="">This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.This GDB was configured as "i686-pc-linux-gnu".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http: www.gnu.org="" software="" gdb="" bugs="">.Find the GDB manual and other documentation resources online at:<http: www.gnu.org="" software="" gdb="" documentation="">.For help, type "help".Type "apropos Word" to search for commands related to "word"...Reading symbols from ./a.out...done.[New LWP 9662] warning: Could not load shared library symbols for linux-gate.so.1.Do you need "set solib-search-path" or "set sysroot"?Core was generated by `./a.out'.Program terminated with signal SIGFPE, Arithmetic exception.#0  0x08048415 in core_dump ()(gdb) where#0  0x08048415 in core_dump ()#1  0x0804844b in main ()(gdb)可以看到上面并没有给出具体的代码&行号,因为需要添加-g编译选项。为此重新编译、运行,此时的coredumnp文件就提供了全面的信息:
~/examples/cpp/core_dump % gdb ./a.out coreGNU gdb (GDB) 7.7Copyright (C) 2014 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http: gnu.org="" licenses="" gpl.html="">This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.This GDB was configured as "i686-pc-linux-gnu".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http: www.gnu.org="" software="" gdb="" bugs="">.Find the GDB manual and other documentation resources online at:<http: www.gnu.org="" software="" gdb="" documentation="">.For help, type "help".Type "apropos word" to search for commands related to "word"...Reading symbols from ./a.out...done.[New LWP 9758] warning: Could not load shared library symbols for linux-gate.so.1.Do you need "set solib-search-path" or "set sysroot"?Core was generated by `./a.out'.Program terminated with signal SIGFPE, Arithmetic exception.#0  0x08048415 in core_dump () at main.c:77                       printf("(%d, %d)/n", i, 100 / i);(gdb) where#0  0x08048415 in core_dump () at main.c:7#1  0x0804844b in main () at main.c:14(gdb) 补充:

当然,并不是所有的异常都会生成coredump文件,具体请参考《Unix环境高级编程(2nd)》第十章 信号。有些环境缺省设置coredump文件是0字节,为此需要ulimit -c 1024(文件大小)。ulimit -c unlimited


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表