當前位置:才華齋>計算機>作業系統>

Linux中生成Core Dump系統異常資訊記錄檔案處理方法介紹

作業系統 閱讀(5.57K)

 1 什麼是 Core Dump

Linux中生成Core Dump系統異常資訊記錄檔案處理方法介紹

Core Dump 又叫核心轉儲。在程式執行過程中發生異常時,將其記憶體資料儲存到檔案中,這個過程叫做 Core Dump。

 2 Core Dump 的作用

在開發過程中,難免會遇到程式執行過程中異常退出的情況,這時候想要定位哪裡出了問題,僅僅依靠程式自身的資訊列印(日誌記錄)往往是不夠的,這個時候就需要 Core Dump 檔案來幫忙了。

一個完整的 Core Dump 檔案實際上相當於恢復了異常現場,利用 Core Dump 檔案,可以檢視到程式異常時的所有資訊,變數值、棧資訊、記憶體資料,程式異常時的執行位置(甚至記錄程式碼行號)等等,定位所需要的一切資訊都可以從 Core Dump檔案獲取到,能夠非常有效的提高定位效率。

 3 如何生成 Core Dump

3.1 Core Dump 檔案生成開關

Core Dump 檔案的生成是由Core檔案大小限制,Linux中預設的Core檔案大小設定為零,也就是不生成 Core Dump 檔案,可以使用ulimit -c命令來檢視當前的Core檔案大小限制。

要生成 Core Dump 檔案,只需要執行下面的命令設定Core檔案的大小即可(其中filesize引數的單位為KByte):

ulimit -c filesize

如果要設定Core檔案大小無限制(即把程式完整的執行記憶體都儲存下來),則執行如下命令:

ulimit -c unlimited

3.2 Core Dump 檔名設定

Core Dump 檔案預設的名字為core,而且新的Core檔案會把老的覆蓋,這樣我們只能看到最後一次的 Core Dump 資訊,可以通過設定Core檔名稱模板,使每次生成的 Core Dump 檔案區分開來。

Core Dump 檔案的命名規則定義在/proc/sys/kernel/core_pattern檔案中,規則中還可以加入預設的變數來更好的區分Core檔案,支援的變數列表如下:

%% %字元 %p 程序ID(PID) %u 使用者ID(UID) %g 使用者組ID %s 觸發 Core Dump 的訊號 %t 觸發 Core Dump 的時間(單位為秒,從 1970-01-01 00:00:00 開始計算) %h 主機名稱(主機名可以通過uname命令來檢視) %e 程式名稱(無路徑資訊) %E 程式的路徑名稱(路徑中的/會被!替代) %c Core檔案的'限制大小值(Linux 2.6.24版本後開始支援)

注:Core Dump 檔名的最大長度為128位元組(在 Linux 2.6.19 版本前,最大長度為64位元組)。

例如:可以通過下面的命令,生成檔名為core-程式名稱-程序ID-時間的 Core Dump 檔案:

echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern

從 Linux 2.4 版本開始,提供了一種比較原始的Core檔名設定方式,直接設定/proc/sys/kernel/core_uses_pid檔案中的值為1,生成的Core檔名中便會自動加上字尾,即生成的檔名為這種形式。執行下面的命令可以設定該值:

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

4 如何使用 Core Dump

有了 Core Dump 檔案後,可以使用GDB來載入分析,執行如下命令(假設可執行程式名稱及路徑為/home/hutaow/test_dump,生成的Core檔名為core):

gdb /home/hutaow/test_dump -c core

載入完成後,即可以在GDB中檢視程式異常時的各種執行資訊了(檢視變數值、執行緒資訊、呼叫棧、反彙編等等)。