GCC如何產生core dump

先決條件

1.安裝apport(automatically generate crash reports for debugging)

2.修改/etc/security/limits.conf文件,使允許core dump,或者用ulimit -c unlimited設置core dump文件的大小爲unlimited

3.C/C++的編譯開關-g(產生調試符號)

######運行編譯好的程序testc(我的程序)

kimi@kimi-desktop:~/testc/bin/Debug$ ./testc

######下面一行顯示了core dumped表示成功,core文件在/var/crash或者在當前目錄

段錯誤 (core dumped)

kimi@kimi-desktop:~/testc/bin/Debug$ ls

######果然在當前目錄

core testc

######gdb一下

kimi@kimi-desktop:~/testc/bin/Debug$ gdb testc core

GNU gdb 6.8-debian

Copyright (C) 2008 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 "i486-linux-gnu"...

warning: Can't read pathname for load map: Input/output error.

Reading symbols from /usr/lib/libstdc++.so.6...done.

Loaded symbols for /usr/lib/libstdc++.so.6

Reading symbols from /lib/tls/i686/cmov/libm.so.6...done.

Loaded symbols for /lib/tls/i686/cmov/libm.so.6

Reading symbols from /lib/libgcc_s.so.1...done.

Loaded symbols for /lib/libgcc_s.so.1

Reading symbols from /lib/tls/i686/cmov/libc.so.6...done.

Loaded symbols for /lib/tls/i686/cmov/libc.so.6

Reading symbols from /lib/ld-linux.so.2...done.

Loaded symbols for /lib/ld-linux.so.2

Core was generated by `./testc'.

######程序是由於段錯誤退出的

Program terminated with signal 11, Segmentation fault.

[New process 13072]

######段錯誤的地方在dummy_function - main.c的第5行

#0 0x080483a4 in dummy_function () at /home/kimi/testc/main.c:5

5 *ptr = 0x00;

######打印一下調用堆棧

(gdb) bt

#0 0x080483a4 in dummy_function () at /home/kimi/testc/main.c:5

#1 0x080483bc in main () at /home/kimi/testc/main.c:12

(gdb)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章