在開發和使用Linux程式時,我們最怕的就是莫過於程式莫明其妙的當掉了,雖然對整個系統來說是沒有什麼影響,但對於程式使用尤其是程式開發人員來說,這顯然是難以忍受的,有這樣一種技術,作業系統把程式當掉時的內容儲存起來,讓我們在程式開發時作一個調試參考。
1、
什麼是core dump?Core,即core memory, 指由一系列小當納圈形的磁性材料組成的儲存空間,這裡不過是沿用了這一稱呼,而dump就是堆放的意思。core dump又叫核心轉儲, 當程式運行過程中發生異常, 程式異常退出時, 由作業系統把程式當前的記憶體狀況儲存在一個core檔案中, 叫core dump.
2、
如何開啟core dump支援?有的作業系統並沒有預設開啟core dump支援,需要用ulimit -c unlimited語句進行設定,core檔案產生的位置一般在程式啟動並執行目前的目錄下,檔案名稱為core.進程號(當然不同的系統也許有所不同,可以查看相手冊對路徑和檔案名稱進行設定).
3、
Core dump的使用方法首先應該在用gcc進行編譯時間選擇-g選項,以便起動debug支援,產生可執行檔時ex,./ex運行可執行檔,如果程式當掉,則會產生一個core檔案,假設為core.1568,則gdb ex core.1568進入gdb,然後再用where命令進行查看即可。
4、
舉例說明假設My Codemain.c為:
#include <stdio.h>
int div(int i, int j)
...{
return i / j;
}
int main()
...{
int i = 2;
int j = 0;
printf("%d ", div(i, j));
return 0;
}
顯然有一個被零除的錯誤,用gcc –g main.c –o main進行編譯,然後./main執行,不可避免的程式要down掉,然後用gdb main core檔案名稱 進行分析,然後你就能看到分析結果,採用這種方法,可以找到程式啟動並執行大部分bug.5、其它-用kill命令查詢訊號的名稱和值有時候core dump顯示的結果是一些訊號的值,這時需要對這些值進行查詢,這時要用到kill命令。Kill –l :列出所有訊號的名稱和值Kill –l val:查詢值為val的訊號名稱Kill –l signame: 查詢signame訊號的值。本文總結了core dump技術的基本使用方法,並進行了舉例,對於初學Linux程式開發人員來說,多多少少會有點協助。