Core dump: 在程序運行過程當中異常終止或崩潰,操做系統將當時的內存狀態記錄下來,保存在一個文件中。linux
其中會包含寄存器信息(包括程序指針,棧指針等),內存管理信息,操做系統狀態等信息。dom
linux 中默認忽略 Stop信號、Terminate信號、Ignore信號等,若是信號在默認狀況下,在下列幾種信號發生時ui
會產生core dump: SIGQUIT(quit from keyboard ), SIGILL(illegal instruction), SIGABRT(abort signal),
操作系統
SIGSEGV(invalid memory reference), SIGTRAP(trace/breakpoint trap)指針
ctrl+z 掛起進程 SIGTSTP信號(默認爲暫停進程)code
ctrl+c終止進程 SIGINT信號(默認爲終止進程)進程
ctrl+\ (默認SIGQUIT信號)產生core dump內存
打開core dump:it
在終端輸入 ulimit -c ,輸出爲0,說明默認是關閉core dump的內存管理
輸入 ulimit -c unlimited 開啓core dump功能,而且不限制core dump文件的大小,若是要限制文件大小,
將unlimited改爲須要的文件大小,單位爲blocks(KB)
以上命令支隊當前終端有效,若是永久有效,能夠修改/etc/security/limits.conf文件,
增長一行:
#<domain> <type> <item> <value>
* soft core unlimited
修改core保存文件的路徑
默認生在的core文件在可執行文件所在的目錄下,文件名爲core
經過修改/proc/sys/kernel/core_uses_pid文件能夠讓生成的core文件名是否自動加上pid號
如 echo 1> /proc/sys/kernel/core_uses_pid,生成的core文件名將會變成core.pid,其中pid表示進程的pid
經過修改 /proc/sys/kernel/core_pattern 來控制生成的core文件生成的路徑和保存格式
如用echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern 設置成core-命令名-pid-時間戳
gdb調式
gdb program core 來查看core文件,其中program爲可執行程序名,core爲生成的core文件名。