linux下除錯core的命令,察看堆疊狀態命令

2021-06-04 02:45:56 字數 2579 閱讀 1401

**:

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案(是乙個記憶體映像,同時加上除錯資訊)。使用gdb來檢視core檔案,可以指示出導致程式出錯的**所在檔案和行數。

首先看看預設的一些core的引數,注意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 **者注: 使用-c unlimited不限制core檔案大小)

$ 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。

(轉者注:預設生成的檔案就叫core,不帶pid,如果要帶pid需要設定,通過echo "1" > /proc/sys/kernel/core_uses_pid能夠設定pid)

$ gdb --core=core.9128

#0 0x08048373 in ?? ()

#1 0xbfffd8f8 in ?? ()

#2 0x0804839e in ?? ()

#3 0xb74cc6b3 in ?? ()

#4 0x00000000 in ?? ()

此時用bt看不到backtrace,也就是呼叫堆疊,原來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);

linux下除錯core的命令,察看堆疊狀態命令

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。首先看看預設的一些core的引數,注意core file size是個0,程式出錯時不會產生core檔案了。ulimit a c...

Linux下除錯總結

感覺linux環境下段錯誤的產生原因及除錯方法小結寫的不錯,列舉了幾個主要的除錯方式。有幾點補充 1.在使用core dump的時候,關於開啟 關閉生成core檔案的命令 ulimit c unlimited 使core檔案大小沒有限制。ulimit c 0 限制core檔案大小為0,即不產生cor...

linux除錯core檔案

core dump test.c 1 include 2 3 const char str test 45 void core test 6 9 10 int main 11 以上為除錯 編譯完成以後 當前目錄ls 已經找到了core 檔案 root localhost gongmh ls bate...