core dump 簡介
在使用半導體作為記憶體的材料前,人類是利用線圈當作記憶體的材料(發明者為王安),線圈就叫作core ,用線圈做的記憶體就叫作“core memory”。(線圈的單詞應該是coil,呵呵)如今,半導體工業澎勃發展,已經沒有人用線圈當記憶體了,不過,在許多情況下,人們還是把記憶體叫作“core”。 是以注意了:這裡的core不是核心,而是記憶體。不過結合實際來看,好像也有點“核心所占記憶體”的意思。
作業系統就會把程式挂掉時的記憶體内容寫入一個叫做core的檔案裡(這個寫入的動作就叫dump,dump的英語意思是垃圾、傾倒。從這裡來看,這些記憶體的内容是程式錯誤運作的結果,是以算是垃圾,把他弄出來就好比從大的記憶體池裡“傾倒”),以便于我們調試。這個過程,是以叫做core dump。
1. 在嵌入式系統中,有時core dump直接從序列槽列印出來,結合objdump查找ra和epa位址,運用棧回溯,可以找到程式出錯的地方。
2. 在一般Linux系統中,預設是不會産生core dump檔案的,通過ulimit -c來檢視core dump檔案的大小,一般開始是0,可以設定core檔案大小,ulimit -c 1024(kbytes機關)或者ulimit -c unlimited。
3. core dump檔案輸出設定,一般預設是目前目錄,可以在/proc/sys/kernel中找到core-user-pid,通過
echo "1" > /proc/sys/kernel/core-user-pid使core檔案名加上pid号,還可以用
mkdir -p /root/corefile
echo "/root/corefile/core-%e-%p-%t" > /proc/sys/kernel/core-pattern控制core檔案儲存位置和檔案名格式。
以下是參數清單:
%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 添加指令名