linux coredump 調試

1.設置core文件的最大值
命令:
ulimit - get and set user limits
參數:
-c 設置core文件的最大值.單位:blocks (-core)
ulimit -c :查看core文件的最大值,輸出爲0表示文件大小爲0,即沒有core dump文件輸出。
ulimit -c unlimited :不限制生成core dump文件的大小。
(
在linux平臺下,設置core dump文件生成的方法:
1) 在終端中輸入ulimit -c 如果結果爲0,說明當程序崩潰時,系統並不能生成core dump。
2) 使用ulimit -c unlimited命令,開啓core dump功能,並且不限制生成core dump文件的大小。如果需要限制,加數字限制即可。ulimit - c 1024
3) 默認情況下,core dump生成的文件名爲core,而且就在程序當前目錄下。新的core會覆蓋已存在的core。通過修改/proc/sys/kernel/core_uses_pid文件,可以將進程的pid作爲作爲擴展名,生成的core文件格式爲core.xxx,其中xxx即爲pid
4) 通過修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:將所有的core文件生成到/corefile目錄下,文件名的格式爲core-命令名-pid-時間戳. echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
)
2 測試代碼
coredump_test.c

#include <stdio.h>

int main()
{
    int i;
    for(i=0;i<10;i++){
        printf("%d ",i);
    }
    printf("\n");
    int *p=NULL;
    *p = 100;//操作空指針,程序崩潰
    return 0;
}

3 編譯

gcc -g coredump_test.c -o coredump_test

4 運行

ulimit -c unlimited
ly@ly:~$ ulimit -c
unlimited
ly@ly:~$ ./coredump_test 
0 1 2 3 4 5 6 7 8 9 

段錯誤 (核心已轉儲)
如果沒用:
ulimit -c unlimited
不會生成coredump文件(默認文件名:core)。
5

gdb ./coredump_test  core

輸出:
。。。

Core was generated by `./coredump_test'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00000000004005c2 in main () at coredump_test.c:11
11      *p = 100;
發佈了510 篇原創文章 · 獲贊 275 · 訪問量 138萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章