美文网首页
C/C++崩溃 linux的dump文件不能生成

C/C++崩溃 linux的dump文件不能生成

作者: 生活简单些 | 来源:发表于2022-09-24 21:48 被阅读0次

    1. ulimit -a 查看生成dump文件是否开启了

      shell键入ulimit -a查看core文件有没有限制大小,即:如果发现core file size这一项值为0,则意味着没有开启。

    开启办法: echo 'ulimit -c unlimited' >> ~/.bashrc或者直接打开.bashrc添加ulimit -c unlimited

    (如果大小为0,说明禁止了core文件的产生,可以通过 ulimit -c unlimited 来解除限制)

    2. 查看/proc/sys/kernel/core_pattern的定义

      core dumpe生成的文件默认为core, 且它的缺省位置是程序所在目录,可以通过修改/proc/sys/kernel/core_pattern来指定core文件生成位置了名称。
    通过查看core_pattern文件,发现其确实指定了一个路径,于是我前往那个路径,发现竟然是脚本程序,后来查看说明文件,才知道core_pattern中如果首先指定了一个 '|' 管道符,则会将生成的core文件传递给后面所跟的脚本去处理。
      至此,也就确定了问题的原因,'|'管道符后面的脚本将我们的core文件给吞了,解决方法自然就是去掉这个脚本,换成自己指定的目录。
    但直接去修改core_pattern文件并没有成功,保存时会提示fsync错误,只能通过命令修改,如下方法1:

    • 方法1(临时生效办法):sudo bash -c "echo core > /proc/sys/kernel/core_pattern"
    • 方法2(永久生效办法):使用sysctl -w name=value命令,即:/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p

    为了更详尽的记录core dump当时的系统状态,可通过以下参数来丰富core文件的命名:
    %% 单个%字符
    %p 所dump进程的进程ID
    %u 所dump进程的实际用户ID
    %g 所dump进程的实际组ID
    %s 导致本次core dump的信号
    %t core dump的时间 (由1970年1月1日计起的秒数)
    %h 主机名
    %e 程序文件名

    相关文章

      网友评论

          本文标题:C/C++崩溃 linux的dump文件不能生成

          本文链接:https://www.haomeiwen.com/subject/mrjaortx.html