天天看點

linux 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檔案生成路徑:

輸入可執行檔案運作指令的同一路徑下。

1)/proc/sys/kernel/core_uses_pid可以控制core檔案的檔案名中是否添加pid作為擴充。檔案内容為1,表示添加pid作為擴充名,生成的core檔案格式為core.xxxx;為0則表示生成的core檔案同一命名為core。

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

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

2)proc/sys/kernel/core_pattern可以控制core檔案儲存位置和檔案名格式。

echo "/corefile/core-%e-%p-%t" > 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時間

    %h - insert hostname where the coredump happened into filename 添加主機名

    %e - insert coredumping executable name into filename 添加指令名

3.core檔案的檢視

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

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

 gdb ./a.out

 core-file core.xxxx

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

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

1)gdb -core=core.xxxx

file ./a.out

bt

2)gdb -c core.xxxx

4.開發闆上使用core檔案調試

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

在 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的方式來規避這一點。

繼續閱讀