所謂核心轉儲文件是內含進程終止時內存映像的一個文件。
產生條件:特定的信號會引起進程建立一個核心轉儲文件並終止運行。
包括哪些特定信號,請參見http://man7.org/linux/man-pages/man7/signal.7.html
關於core文件更詳細內容http://man7.org/linux/man-pages/man5/core.5.html
接下來咱們說一些關於core文件常見的狀況和問題。html
1.core文件的生成開關和大小限制linux
輸入ulimit -a命令咱們能夠看到第一行core文件大小爲0,即咱們關閉了core文件產生,若不爲0,就打開了唄。或ulimit -c只顯示core文件大小。
使用ulimit -c filesize命令,能夠限制core文件的大小(filesize的單位爲kbyte)。若是生成的信息超過此大小,將會被裁剪,最終生成一個不完整的core文件。在調試此core文件的時候,gdb會提示錯誤。若ulimit -c unlimited,則表示core文件的大小不受限制。
若是想讓修改永久生效,則須要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf。
2.core文件的生成路徑和名稱
core文件默認認生成路徑是進程的工做目錄中,默認名爲core。若系統生成的core文件採用默認的名core,則新的core文件生成將覆蓋原來的core文件。
1)/proc/sys/kernel/core_uses_pid能夠控制core文件的文件名中是否添加pid做爲擴展。文件內容爲1,表示添加pid做爲擴展名,生成的core文件格式爲core.xxxx;爲0則表示生成的core文件同一命名爲core。
可經過如下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid
2)/proc/sys/kernel/core_pattern能夠控制core文件保存位置和文件名格式。(從Linux2.6版本纔有,以前版本可能沒有此文件)
可經過如下命令修改此文件:
echo "/corefile/core-%e-%p-%t" >/proc/sys/kernel/core_pattern,能夠將core文件統一輩子成到/corefile目錄下,產生的文件名爲core-命令名-pid-時間戳
如下是參數列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加當前uid
%g - insert current gid into filename 添加當前gid
%s - insert signal that caused the coredump into the filename 添加致使產生core的信號
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成時的unix時間
%h - insert hostname where the coredump happened into filename 添加主機名
%e - insert coredumping executable name into filename 添加命令名
注意若你指定的文件夾不存在,則core文件不會生成。
3.core文件的查看
gdb [exec file] [core file]
如:
gdb ./test test.core
在進入gdb後, 用bt命令查看backtrace以檢查發生程序運行到哪裏, 來定位core文件->行.
GDB中鍵入where,也會看到程序崩潰時堆棧信息(當前函數以前的全部已調用函數的列表(包括當前函數),gdb只顯示最近幾個)
咳,天下文章一大抄
參考 http://blog.chinaunix.net/uid-21411227-id-1826911.html
http://www.nginx.cn/1521.html
http://www.cnblogs.com/xuxm2007/archive/2010/10/22/1858095.html
強制進程產生coredump,檢測死鎖以及進程快照 http://blog.chinaunix.net/uid-23629988-id-175809.html
---------------------
做者:二手碼農
來源:CSDN
原文:https://blog.csdn.net/hu_jiacheng/article/details/40950471