1、查看是否打開了coredump
lybxin@Inspiron:~/MyRes/miscellany/test/01_coredump$ulimit -c #這里可以看到ulimit限制coredump的產生
0
lybxin@Inspiron:~/MyRes/miscellany/test/01_coredump$ulimit -c unlimited #取消限制
lybxin@Inspiron:~/MyRes/miscellany/test/01_coredump$ulimit -c
unlimited
2、coredump默認存儲在與程序相同的目錄里
3、core文件的命名規則
/proc/sys/kernel/core_uses_pid 1 表示使用procid命名,0表示不使用
/proc/sys/kernel/core_pattern 可以設置格式化的 core 文件保存位置或文件名
echo “/opt/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
將會控制所產生的 core 文件會存放到 /corefile 目錄下,產生的文件名為 core- 命令名 -pid- 時間戳
以下是參數列表 :
%p - insert pid into filename 添加 pid
%u - insert current uid into filename 添加當前 uid
%g - insert current gid into filename 添加當前 gid
%s - insert signal that caused the coredump into the filename 添加導致產生 core 的信號
%t - insert UNIX time that the coredump occurred into filename 添加 core 文件生成時的 unix 時間
%h - insert hostname where the coredump happened into filename 添加主機名
%e - insert coredumping executable name into filename 添加命令名
4、core_pattern內核解析函數
format_corename
5、Coredump調試
除了下面方法外,也可以在打開gdb后使用core-file core-xxx命令來吧core-xxx文件加載進去
lybxin@Inspiron:~/MyRes/miscellany/test/04_gdbtest$gdb -core=core
GNU gdb (Ubuntu7.11.1-0ubuntu1~16.04)7.11.1
Copyright(C)2016FreeSoftwareFoundation,Inc.
LicenseGPLv3+: 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 "x86_64-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".
[New LWP 6093]
Core was generated by `./testgdb.out'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00000000004005f4 in ?? ()
(gdb) bt
#0 0x00000000004005f4 in ?? ()
#1 0x000000000000000a in ?? ()
#2 0x0000000000000140 in ?? ()
#3 0x00007fff5297f7d0 in ?? ()
#4 0x0000000000000145 in ?? ()
#5 0x00007fff5297f6d0 in ?? ()
#6 0x000000000040065e in ?? ()
#7 0x00000000004007ac in ?? ()
#8 0x000000647ce2a7fa in ?? ()
#9 0x0000000000000000 in ?? ()
(gdb) file all.out
warning: core file may not match specified executable file.
Reading symbols from all.out...done.
(gdb) bt
#0 0x00000000004005f4 in test1 (p=320)
at /home/lybxin/MyRes/miscellany/test/04_gdbtest/testgdb.c:18
#1 0x000000000040065e in test2 (offset=100)
at /home/lybxin/MyRes/miscellany/test/04_gdbtest/testgdb.c:30
#2 0x00000000004006c3 in main (argc=1, argv=0x7fff5297f7d8)
at /home/lybxin/MyRes/miscellany/test/04_gdbtest/testgdb.c:46
(gdb)