无法为崩溃的程序创建核心文件



我正在使用Ubuntu 12.04 LTS。我写了一个简单的程序,如下所示来创建崩溃

// null.c
#include<stdio.h>
int main()
{
   int *p = NULL;
   int k=*p;
   printf("%d",sizeof(0));
   return 0;
}

现在我使用"gcc -g null.c"运行然后是"./a.out",输出符合预期。

Segmentation fault (core dumped)

现在我想使用 gdb 查看核心转储文件。我做了以下事情

  1. 我检查了当前目录,没有核心转储文件
  2. 我尝试尝试用内容"core.%e.%p"更改/proc/sys/kernel/core_pattern。但是我无法写入文件。它说"Fsync 失败"。
  3. 我使用了"sudo vi/proc/sys/kernel/core_pattern"。仍然无法写入文件。

我想在当前目录中创建核心转储。现在怎么办?

您真正的问题似乎不是"我的核心转储在哪里",而是"我如何修改/proc/sys/kernel/core_pattern"。

sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern'

应该做这个伎俩。

您需要使用以下命令调整核心转储大小限制:

ulimit -S -c 最大核心转储大小

该值以 Kb 为单位给出。

你不需要

使用核心模式。 它只是以这种格式转储 %e.%p

你需要做的是 #ulimit -C 无限

并检查 #ulimit -a

并确认核心文件大小是否设置正确。之后,您将获得核心作为core.pid。

我的理解是使用 ulimit 不是永久性的,即如果您重新启动,那么限制会回到 0。要拥有无限永久,您需要更改/etc/security/limits.conf。同样,对于核心模式等,更改/etc/sysctl.conf。

最新更新