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

时间:2012-10-06 13:30:31

标签: linux file gdb coredump

我使用的是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”。仍然无法写入文件。
  4. 我想在当前目录中创建核心转储。现在该怎么办?

4 个答案:

答案 0 :(得分:22)

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

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

应该这样做。

答案 1 :(得分:4)

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

  

ulimit -S -c maximum-core-dump-size

该值以Kb给出。

答案 2 :(得分:2)

您不需要使用核心模式。它只是以那种格式转储%e。%p

你需要做的是#ulimit -c unlimited

并检查#ulimit -a

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

答案 3 :(得分:1)

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