Linux下core檔案除錯方法

2021-05-18 15:32:44 字數 1581 閱讀 8084

在程式不尋常退出時,核心會在當前工作目錄下生成乙個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

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下core檔案除錯方法

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...

Linux下core檔案除錯方法

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...

linux下core檔案除錯方法

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...