Linux core dump檔案介紹及除錯

2021-06-26 01:08:36 字數 3393 閱讀 9171

1.core檔案的簡單介紹

在乙個程式崩潰時,它一般會在程式的當前目錄下生成乙個core檔案。core檔案僅僅是乙個記憶體映象(同時加上除錯資訊),主要是用來除錯的。

2. 開啟或關閉core檔案的生成

以下命令可以檢查生成core檔案的選項是否開啟:

ulimit –a

該命令將顯示所有的使用者定製,其中選項-a代表「all」。檢視結果中形如:core file size          (blocks, -c) 0的內容,如果紅色文字為0,則表示未開啟core檔案;否則,已開啟並代表core檔案的最大kb位元組數。

用以下命令來系統為當前bash的當前使用者生成core檔案,生成的檔案一般在程式的當前目錄下

#ulimit –c unlimited

unlimited表示coredump檔案大小無限制。

另外,可以用以下命令來阻止系統生成core檔案:

ulimit -c 0

0表示檔案大小為0。

也可以修改系統檔案來調整core選項

在/etc/profile通常會有這樣一句話來禁止產生core檔案,通常這種設定是合理的:

ulimit -s -c 0 > /dev/null 2>&1

但是在開發過程中有時為了除錯問題,還是需要在特定的使用者環境下開啟core檔案產生的設定

在使用者的~/.bash_profile裡加上ulimit -c unlimited來讓特定使用者可以產生core檔案。

也可以用ulimit -c 1024,表示限制產生的core檔案的大小不能超過1024kb

3. 設定core dump的核心轉儲檔案目錄和命名規則

/proc/sys/kernel/core_uses_pid可以控制產生的core檔案的檔名中是否新增pid作為擴充套件,如果新增則檔案內容為1,否則為0

/proc/sys/kernel/core_pattern可以設定格式化的core檔案儲存位置或檔名,比如原來檔案內容是core-%e

可以這樣修改:

echo "/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時間

%e - insert coredumping executable name into filename 新增命令名

4. 使用core檔案來除錯程式

例如,a.c程式內容如下:

#includeint main()

1、用-g引數編譯a.c程式檔案,並執行

#gcc –g a.c –o a.out

#./a.out

floating point exception (core dumped)

#lsa.c           a.out                   core

當前目錄下生成了core檔案。

2、使用gdb除錯core檔案

#gdb –core=core

gnu gdb (ubuntu 7.7-0ubuntu3.1) 7.7

license gplv3+: gnu gpl version 3 or later

this is free software: you are free tochange and redistribute it.

there is no warranty, to the extentpermitted by law.  type "showcopying"

and "show warranty" for details.

this gdb was configured as"x86_64-linux-gnu".

type "show configuration" forconfiguration details.

for bug reporting instructions, please see:

.find the gdb manual and other documentationresources online at:

.for help, type "help".

type "apropos word" to search forcommands related to "word".

[new lwp 29993]

core was generated by `./a.out'.

program terminated with signal sigfpe,arithmetic exception.

#0 0x0000000000400546 in ?? ()

(gdb)

此時會顯示生成此core檔案的程式名(a.out),中止此程式的訊號(sigfpe)等等。

(gdb) bt

#0 0x0000000000400546 in ?? ()

#1 0x00007fff27fbf7d0 in ?? ()

#2 0x0000000000000000 in ?? ()

此時bt還不能看到呼叫堆疊,需要將程式的symbol讀進來

(gdb) file ./a.out

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

這時就可以使用bt檢視呼叫堆疊,用list檢視程式在哪行**中止了。

(gdb) bt

#0 0x0000000000400546 in main () at a.c:8

(gdb) list

1       #include

2      

3       int main()

4       {

5         int a = 10;

6         int b;

7         a =  a - 10;

8         b =  10 / a;

9         printf("%d", b);

10     

Linux Coredump 配置生成例項

coredump是linux程式執行時的記憶體映象,當程式發生異常 獲儲存,用於程式除錯分析。為程式儲存coredump 又稱core 檔案需要系統配置支援。ulimit c 0 ulimit c unlimited ulimit c 1024 0表示不生成檔案。可以通過 ulimit c 設定乙個...

Linux core dump的除錯技術(1)

有的程式可以通過編譯,但在執行時會出現segment fault 段錯誤 這通常都是指標錯誤引起的.以下是我們詳細的對linux core dump的除錯技術進行的介紹,想能幫助大家 1.linux core dump 前言 有的程式可以通過編譯,但在執行時會出現segment fault 段錯誤 ...

Linux core dump 分析及相關除錯

core是core dump檔案,是linux伺服器的一種機制。core是個程式的嚴重問題,會致使程式直接掛掉,需要恢復。core檔案產生原因很多,有主動core 請求的,也有是程式的非法操作導致os傳送sigsegv相關的訊號。主動core的方法 1 程式在執行中,需要檢視裡面的程序或者執行緒的運...