[Linux]core檔案調試方法

來源:互聯網
上載者:User

來源: shaovey的專欄

在程式不尋常退出時,核心會在當前工作目錄下產生一個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.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
file ./a.out
bt

4.開發板上使用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的方式來規避這一點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.