【調(diào)試】Core Dump是什么?Linux下如何正確永久開啟?

-- 作者 謝恩銘 轉(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 (維基百科)

磁芯內(nèi)存的一個單元

在 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命令使修改立即生效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 在Linux下程序不尋常退出時,內(nèi)核會在當前工作目錄下生成一個core文件(是一個內(nèi)存映像,同時加上調(diào)試信息)。使...
    隨風化作雨閱讀 47,960評論 2 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 大家都知道,Linux系統(tǒng)提供了非常多非常多的命令或工具,這些命令都各有所長,都是系統(tǒng)需要的。但我們精力有限,要掌...
    劉振鋒閱讀 11,687評論 10 90
  • 一 1981年,粉碎了“四人幫”,女排勇奪世界冠軍,長江葛洲壩截流工程合龍……那一年還發(fā)生了什么呢?是斌和雅...
    蕭澄閱讀 249評論 0 0
  • 自從下山后,心情一直處于很好的狀態(tài)。每天都開開心心,無視壓力,無視周圍的負面的東西。一直心情很平靜的沉淀著自己...
    柳立穩(wěn)閱讀 227評論 0 1

友情鏈接更多精彩內(nèi)容