
-- 作者 謝恩銘 轉(zhuǎn)載請注明出處
Core Dump是什么?
Core Dump乍聽之下很抽象。
當程序運行的過程中異常終止或崩潰,操作系統(tǒng)會將程序當時的內(nèi)存狀態(tài)記錄下來,保存在一個文件中,這種行為就叫做Core Dump(中文有的翻譯成“核心轉(zhuǎn)儲”)。
我們可以認為Core Dump是“內(nèi)存快照”,但實際上,除了內(nèi)存信息之外,還有些關(guān)鍵的程序運行狀態(tài)也會同時dump下來,例如寄存器信息(包括程序指針、棧指針等)、內(nèi)存管理信息、其他處理器和操作系統(tǒng)狀態(tài)和信息。
Core Dump
對于編程人員診斷和調(diào)試程序是非常有幫助的,因為對于有些程序錯誤是很難重現(xiàn)的,例如指針異常,而 Core Dump 文件可以再現(xiàn)程序出錯時的情景。
在半導體作為電腦內(nèi)存材料之前,電腦內(nèi)存使用的是 磁芯內(nèi)存(Magnetic Core Memory),Core Dump 中的 Core 沿用了磁芯內(nèi)存的 Core 表達。
下圖為磁芯內(nèi)存的一個單元,來自 Wikipedia (維基百科)

在 APUE 一書中作者有句話這樣寫的:
Because the file is named core, it shows how long this feature has been part of the Unix System.
Core在英語中是"核心;要點;果心;[計] 磁心"的意思。
這里的Core就是沿用的是早期電腦磁芯內(nèi)存中的表達,也能看出Unix系統(tǒng)Core Dump機制的悠久歷史。
Dump在英語中是"傾倒;傾卸"的意思,指的是拷貝一種存儲介質(zhì)中的部分內(nèi)容到另一個存儲介質(zhì),或者將內(nèi)容打印、顯示或者其它輸出設(shè)備。dump 出來的內(nèi)容是格式化的,可以使用一些工具來解析它。
現(xiàn)代操作系統(tǒng)中,用Core Dump表示當程序異常終止或崩潰時,將進程此時的內(nèi)存中的內(nèi)容拷貝到磁盤文件中存儲,以方便編程人員調(diào)試。
如何開啟Core Dump?
臨時開啟Core Dump,并且設(shè)置大小不受限:
命令行輸入:
ulimit -c unlimited
要永久打開Core Dump并且使之大小不受限,網(wǎng)上說有兩種方法:
- 打開 core dump 功能
在終端中輸入命令 ulimit -c ,輸出的結(jié)果為 0,說明默認是關(guān)閉 core dump 的,即當程序異常終止時,也不會生成 core dump 文件。
我們可以使用命令 ulimit -c unlimited 來開啟 core dump 功能,并且不限制 core dump 文件的大小; 如果需要限制文件的大小,將 unlimited 改成你想生成 core 文件最大的大小,注意單位為 blocks(KB)。
用上面命令只會對當前的終端環(huán)境有效,如果想需要永久生效,可以修改文件 /etc/security/limits.conf文件。增加一行:
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
* soft core unlimited
- 在/etc/profile中加入
ulimit -c unlimited
我試了以上兩種方法,但是輸入
ulimit -c
輸出結(jié)果始終是0。
后來自己想了一種方法,在Ubuntu下行得通:
編輯 .bashrc 文件:
vim ~/.bashrc
添加:
ulimit -c unlimited
保存,退出。
source ~/.bashrc
source命令使修改立即生效。