SA299學習筆記 第五章 管理crash dumps 和core files(4)

litterbaby發表於2007-07-11
SA299學習筆記 第五章 管理crash dumps 和core files(4)[@more@]

同樣,可以透過檢視檔案/etc/coreadm.conf來檢視coreadm命令裡面的引數

# cat /etc/coreadm.conf

# cat /etc/coreadm.conf

#

# coreadm.conf

#

# Parameters for system core file configuration.

# Do NOT edit this file by hand -- use coreadm(1) instead.

#

COREADM_GLOB_PATTERN=

COREADM_GLOB_CONTENT=default

COREADM_INIT_PATTERN=core

COREADM_INIT_CONTENT=default

COREADM_GLOB_ENABLED=no

COREADM_PROC_ENABLED=yes

COREADM_GLOB_SETID_ENABLED=no

COREADM_PROC_SETID_ENABLED=no

COREADM_GLOB_LOG_ENABLED=no

#

使用coreadm命令p選項的一些引數:

%u:EUID;%g:EGID;%f:可執行檔名;%n:系統標示名;%m:機器硬體名;%t:1970.1開始執行的秒數

使用coreadm命令的一些例項:

# coreadm -p core.%f.%p $$

# coreadm -p $HOME/corefiles/%n.%f.%p $$

# coreadm -g /var/core/core.%f.%P -e global

# coreadm 278 5678

幾個相關的概念問題:

何謂 core

在使用半導體作為記憶體的材料前,人類是利用線圈當作記憶體的材料(發明 者為王安),線圈就叫作 core ,用線圈做的記憶體就叫作 core memory。如今 ,半導體工業澎勃發展,已經沒有人用 core memory 了,不過,在許多情況下, 人們還是把記憶體叫作 core

何謂 core dump

我們在開發(或使用)一個程式時,最怕的就是程式莫明其妙地當掉。雖然系 統沒事,但我們下次仍可能遇到相同的問題。於是這時作業系統就會把程式當掉 時的記憶體內容 dump 出來(現在通常是寫在一個叫 core file 裡面),讓 我們或是 debugger 做為參考。這個動作就叫作 core dump

為何會發生 core dump

前面說過,在程式當掉時出錯。在 C/C++語言中,最常發生錯誤的地方就是指 針有問題。您可以利用 core 檔案和 debugger 把錯誤找出來(要怎麼在 debugger 中使用 core 檔案?man 一下 gdb 吧!)。

我可以把 core 檔案刪掉嗎?

如果你不會、不能、不需要修改程式,那就放心地把它刪除了吧!

要怎麼才不會讓 core 檔案出現?

如果用的是tcsh的話, 以試著在 .tcshrc 里加一行:

limit coredumpsize 0

如果用的是bash的話, /etc/profile里加上(或者修改)一條:

ulimit -c 0

有一招, 可以讓你看出 core 最好用的地方 :)

gdb -c core, 進去後打 where, 就可以 show 出你是在程式哪一行當掉的, 還有在當掉時在哪個 function , 這個 function 是被哪個 function call , 而這個 function 又是被哪個 function call .... 一直到 main()

由這個資訊, 可以找出五六成的 bug........ 屢試不爽

, 先決條件, 當你在 compile 時必須把 debug information 的選項開啟 不然, 就會出現一大堆你看不懂的東西,而不是你喜歡的源程式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-925965/,如需轉載,請註明出處,否則將追究法律責任。

相關文章