內容簡介
【調試】Core Dump是什么?Linux下如何正確永久開啟?
Core Dump是什么?Linux下如何正確永久開啟?
Core Dump是什么?
Core Dump乍聽之下很抽象。
當程序運行的過程中異常終止或崩潰,操作系統會將程序當時的內存狀態記錄下來,保存在一個文件中,這種行為就叫做Core Dump(中文有的翻譯成“核心轉儲”)。
我們可以認為Core Dump是“內存快照”,但實際上,除了內存信息之外,還有些關鍵的程序運行狀態也會同時dump下來,例如寄存器信息(包括程序指針、棧指針等)、內存管理信息、其他處理器和操作系統狀態和信息。
Core Dump 對于編程人員診斷和調試程序是非常有幫助的,因為對于有些程序錯誤是很難重現的,例如指針異常,而 Core Dump 文件可以再現程序出錯時的情景。
在半導體作為電腦內存材料之前,電腦內存使用的是 磁芯內存(Magnetic Core Memory),Core Dump 中的 Core 沿用了磁芯內存的 Core 表達。圖為磁芯內存的一個單元,來自 Wikipedia.
在 APUE (《Unix環境高級編程》)一書中作者有句話這樣寫的:
Because the file is named core, it shows how long this feature has been part of the Unix System.
這里的Core就是沿用的是早期電腦磁芯內存中的表達,也能看出Unix系統Core Dump機制的悠久歷史。
Dump 指的是拷貝一種存儲介質中的部分內容到另一個存儲介質,或者將內容打印、顯示或者其它輸出設備。dump 出來的內容是格式化的,可以使用一些工具來解析它。
現代操作系統中,用Core Dump表示當程序異常終止或崩潰時,將進程此時的內存中的內容拷貝到磁盤文件中存儲,以方便編程人員調試。
如何開啟Core Dump?
臨時開啟Core Dump,并且設置大小不受限:
命令行輸入:
ulimit?-c?unlimited
要永久打開Core Dump并且使之大小不受限,網上說有兩種方法:
1. 打開 core dump 功能
在終端中輸入命令 ulimit -c ,輸出的結果為 0,說明默認是關閉 core dump 的,即當程序異常終止時,也不會生成 core dump 文件。
我們可以使用命令 ulimit -c unlimited 來開啟 core dump 功能,并且不限制 core dump 文件的大小; 如果需要限制文件的大小,將 unlimited 改成你想生成 core 文件最大的大小,注意單位為 blocks(KB)。
用上面命令只會對當前的終端環境有效,如果想需要永久生效,可以修改文件 /etc/security/limits.conf文件。增加一行:
*??????????soft?????core???unlimited
2. 在/etc/profile中加入
ulimit??-c?unlimited
我試了以上兩種方法,但是輸入
ulimit?-c
輸出結果始終是0。
后來自己想了一種方法,在Ubuntu下可以:
編輯 .bashrc 文件:
vi?~/.bashrc
添加:
ulimit?-c?unlimited
保存,退出。
source?~/.bashrc
source命令使修改立即生效。