~$ ulimit -a //查看core dump配置狀況
core file size (blocks, -c) 0 //這裏是顯示生成core dump文件最大大小,若是這裏是0,沒法生成core dump文件
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
總結一下,須要定位進程掛在哪一行咱們只須要4個操做,
ulimit -c unlimited //打開生成core dump文件大小限制,unlimited表示無限制。
echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern //配置core dump文件存儲路徑,把/tmp/core-%e-%p設置爲core dump文件的徹底存儲路徑
gcc -o main -g a.c //編譯源程序的時候要帶 -g參數,-g參數表示生成的程序帶調試信息
gdb main /tmp/core-main-10815 //使用gdb查看程序的core dump文件。
就能夠啦
1、只給當前用戶打開生成 core dump文件的限制
最簡單的方法是用戶在本身的~/.bash_profile中加入
ulimit -S -c unlimited > /dev/null 2>&1
這樣設置後容許當前用戶生成沒有大小限制的core dump文件。
2、兩種系統級修改生成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