使用C/C++語言開發程式時,當程式crash的時候產生core dump檔案對於偵錯工具是很有協助的。在Redhat Linux系統中預設是不產生core dump檔案的,這是因為在/etc/profile檔案中有這樣一行ulimit -S -c 0 > /dev/null 2>&1
如何開啟core dump呢?最簡單的方法是使用者在自己的~/.bash_profile中加入ulimit -S -c unlimited > /dev/null 2>&1,這樣設定後允許目前使用者產生沒有大小限制的core dump檔案。此外還有兩種系統級修改產生core dump的方法。
第一種方法是修改/etc/profile,把ulimit那一行改為ulimit -S -c unlimited > /dev/null 2>&1
這樣設定後系統允許所有使用者產生沒有大小限制的core dump檔案。這樣做的優點是不需要重起系統,缺點是無法控制只讓某些使用者產生core dump檔案。
第二種方法是修改/etc/security/limits.conf檔案。很多系統上限都可以通過修改這個檔案改變,如最大子進程個數,最大開啟檔案數等等。這個檔案有詳細的注釋,對如何修改這個檔案做了說明。如果想對所有使用者開啟core dump,可以加入一行* soft core 0
如果只想對某些使用者或使用者組開啟core dump,可以加入user soft core 0或@group soft core 0
注意如果通過修改/etc/security/limits.conf檔案開啟core dump,還需要注釋掉/etc/profile中的ulmit那一行#ulimit -S -c 0 > /dev/null 2>&1這樣修改的優點是可以針對特定使用者或特定組開啟core dump檔案,缺點是需要重起系統。
最後說一下產生core dump檔案的位置,預設位置與可執行程式在同一目錄下,檔案名稱是core.***,其中***是一個數字。core dump檔案名稱的模式儲存在/proc/sys/kernel/core_pattern中,預設值是core。通過以下命令可以更改core dump檔案的位置(如希望產生到/tmp/cores目錄下)echo "/tmp/cores/core" > /proc/sys/kernel/core_pattern