2012-10-06 28 views
7

我正在使用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. 我试图想改变在/ proc/sys目录/内核/ core_pattern与内容“的核心。%E% p”。但我无法写入文件。它说“Fsync失败”。
  3. 我使用了“sudo vi/proc/sys/kernel/core_pattern”。仍然无法写入文件。

我想在我的当前目录中创建核心转储。现在做什么?

回答

19

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

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

应该这样做。

+0

它的工作......谢谢:) –

4

您需要使用下面的命令来调整自己的核心转储大小限制:

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

该值以KB为单位给出。

+0

我设定了它。但是我如何编辑core_pattern文件? –

2

你不需要使用核心模式。它只是转储在格式%即%P

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

,并检查#ulimit -a

并确认核心文件大小设置正确。之后你会得到core.pid作为core.pid。

1

我的理解是,使用ulimit不是永久性的,也就是说,如果重新启动,则限制将回到0.要拥有无限永久性,您需要更改/etc/security/limits.conf。类似的核心模式等,改变/etc/sysctl.conf。