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

2022-09-24  本文已影响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:

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

上一篇下一篇

猜你喜欢

热点阅读