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  
相关文章
相关标签/搜索