在Linux下產生並除錯core檔案

2021-05-09 09:24:35 字數 2583 閱讀 2975

在linux下產生並除錯core檔案

先看看我用的是個什麼機器:

$ uname -a

linux dev 2.4.21-9.30axsmp #1 smp wed may 26 23:37:09 edt 2004 i686 i686 i386 gnu/linux

再看看預設的一些引數,注意core file size是個0,程式出錯時不會產生core檔案了。

$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

file size (blocks, -f) unlimited

max locked memory (kbytes, -l) 4

max memory size (kbytes, -m) unlimited

open files (-n) 2048

pipe size (512 bytes, -p) 8

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 7168

virtual memory (kbytes, -v) unlimited

寫個簡單的程式,看看core檔案是不是會被產生。

$ more foo.c

#include

static void sub(void);

int main(void)

static void sub(void)

$ gcc -wall -g foo.c

$ ./a.out

segmentation fault

$ ls -l core.*

ls: core.*: no such file or directory

沒有找到core檔案,我們改改ulimit的設定,讓它產生。1024是隨便取的,要是core檔案大於1024個塊,就產生不出來了。

$ ulimit -c 1024

$ ulimit -a

core file size (blocks, -c) 1024

data seg size (kbytes, -d) unlimited

file size (blocks, -f) unlimited

max locked memory (kbytes, -l) 4

max memory size (kbytes, -m) unlimited

open files (-n) 2048

pipe size (512 bytes, -p) 8

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 7168

virtual memory (kbytes, -v) unlimited

$ ./a.out

segmentation fault (core dumped)

$ ls -l core.*

-rw------- 1 uniware uniware 53248 jun 30 17:10 core.9128

注意看上述的輸出資訊,多了個(core dumped) 。確實產生了乙個core檔案,9128是該程序的pid。我們用gdb來看看這個core。

$ gdb --core=core.9128

#0 0x08048373 in ?? ()

#1 0xbfffd8f8 in ?? ()

#2 0x0804839e in ?? ()

#3 0xb74cc6b3 in ?? ()

#4 0x00000000 in ?? ()

此時用bt看不到b ackt race,也就是呼叫堆疊,原來gdb還不知道符號資訊在**。我們告訴它一下:

(gdb)file ./a.out

reading symbols from ./a.out...done.

using host libthread_db library "/lib/tls/libthread_db.so.1".

(gdb) bt

#0 0x08048373 in sub () at foo.c:17

#1 0x08048359 in main () at foo.c:8

此時backtrace出來了。

(gdb) l

8         sub();

9         return 0;

10     }

1112     static void sub(void)

13     {

14         int *p = null;

1516         /* derefernce a null pointer, expect core dump. */

17         printf("%d", *p);

(gdb)

在Linux下產生並除錯core檔案

uname a linux dev 2.4.21 9.30axsmp 1 smp wed may 26 23 37 09 edt 2004 i686 i686 i386 gnu linux 再看看預設的一些引數,注意core file size是個0,程式出錯時不會產生core檔案了。ulimit ...

在Linux下產生並除錯core檔案

在linux下產生並除錯core檔案 from 先看看我用的是個什麼機器 uname a linux dev 2.4.21 9.30axsmp 1 smp wed may 26 23 37 09 edt 2004 i686 i686 i386 gnu linux 再看看預設的一些引數,注意core ...

linux下產生斷錯誤的除錯方法

1.編譯 時,需要加上 g2.開發板上執行 ulimit c unlimited 此處是設定生成的 core 檔案大小 在開發板上執行時,如果有斷錯誤會有 segmentation fault core dumped 紅色標記生成了 core 檔案。如果沒有生成 core 檔案一般是沒有設定 cor...