core檔案除錯

2021-06-01 14:03:27 字數 2148 閱讀 3855

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

1.core檔案的生成開關和大小限制

---------------------------------

1)使用ulimit -c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,不會生成core檔案。

2)使用ulimit -c filesize命令,可以限制core檔案的大小(filesize的單位為kbyte)。若ulimit -c unlimited,則表示core檔案的大小不受限制。如果生成的資訊超過此大小,將會被裁剪,最終生成乙個不完整的core檔案。在除錯此core檔案的時候,gdb會提示錯誤。

2.core檔案的名稱和生成路徑

----------------------------

core檔案生成路徑:

輸入可執行檔案執行命令的同一路徑下。

若系統生成的core檔案不帶其它任何擴充套件名稱,則全部命名為core。新的core檔案生成將覆蓋原來的core檔案。

1)/proc/sys/kernel/core_uses_pid可以控制core檔案的檔名中是否新增pid作為擴充套件。檔案內容為1,表示新增pid作為副檔名,生成的core檔案格式為core.***x;為0則表示生成的core檔案同一命名為core。

可通過以下命令修改此檔案:

echo "1" > /proc/sys/kernel/core_uses_pid

core檔案建立在什麼位置

在程序當前工作目錄的下建立。通常與程式在相同的路徑下。但如果程式中呼叫了chdir函式,則有可能改變了當前工作目錄。這時core檔案建立在chdir指定的路徑下。有好多程式崩潰了,我們卻找不到core檔案放在什麼位置。和chdir函式就有關係。當然程式崩潰了不一定都產生core檔案。

什麼時候不產生core檔案

在下列條件下不產生core檔案:

( a )程序是設定-使用者-id,而且當前使用者並非程式檔案的所有者;

( b )程序是設定-組-id,而且當前使用者並非該程式檔案的組所有者;

( c )使用者沒有寫當前工作目錄的許可權;

( d )檔案太大。core檔案的許可權(假定該檔案在此之前並不存在)通常是使用者讀/寫,組讀和其他讀。

利用gdb除錯core檔案,當遇到程式崩潰時我們不再束手無策。

3.core檔案的檢視

-----------------

core檔案需要使用gdb來檢視。

gdb ./a.out

core-file core.***x

使用bt命令即可看到程式出錯的地方。

以下兩種命令方式具有相同的效果,但是在有些環境下不生效,所以推薦使用上面的命令。

1)gdb -core=core.***x

file ./a.out

bt 2)gdb -c core.***x

file ./a.out

bt4.開發板上使用core檔案除錯

-----------------------------

如果開發板的作業系統也是linux,core除錯方法依然適用。如果開發板上不支援gdb,可將開發板的環境(依賴庫)、可執行檔案和core檔案拷貝到pc的linux下。

在 pc上除錯開發板上產生的core檔案,需要使用交叉編譯器自帶的gdb,並且需要在gdb中指定solib-absolute-prefix和 solib-search-path兩個變數以保證gdb能夠找到可執行程式的依賴庫路徑。有一種建立配置檔案的方法,不需要每次啟動gdb都配置以上變數,即:在待執行gdb的路徑下建立.gdbinit。

配置檔案內容:

set solib-absolute-prefix your_cross_compile_path

set solib-search-path your_cross_compile_path

set solib-search-path your_developer_tools_lib_path

handle sig32 nostop noprint pass

注意:待除錯的可執行檔案,在編譯的時候需要加-g,core檔案才能正常顯示出錯資訊!有時候core資訊很大,超出了開發板的空間限制,生成的core資訊會殘缺不全而無法使用,可以通過掛載到pc的方式來規避這一點。

linux gdb除錯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 ...

GDB除錯core檔案

1.什麼是core dump?core dump說的是作業系統執行的乙個動作,當某個程序因為一些原因意外終止 crash 的時候,作業系統會將這個程序當時的記憶體資訊轉儲 dump 到磁碟上,產生的檔案就是core檔案了,一般會以core.形式命名。2.那些訊號能夠引起core dump?經常用到的...

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...