linux下生成core dump文件方法及設置

~$ 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  
相關文章
相關標籤/搜索