2011-05-27 39 views
18

我想知道如何在Ubuntu中生成核心转储文件。我使用Ubuntu 8.04.1和gcc编译器4.2.3。我写了一个简单的C程序来生成核心转储。我已经编译了程序 - gcc -g badpointer.c。当我运行程序时,它给出了分段错误,但是没有产生核心转储。我还需要做些什么来生成核心转储文件?如何在Ubuntu中生成核心转储文件

回答

31

检查输出ulimit -c,如果输出0,这就是为什么你没有核心转储。

使用

ulimit -c unlimited

允许核心创作(也许一个真正的大小限制取代unlimited更安全)。

0

设置最大核心转储大小为ulimit -c大小

32

通过激活你的核心转储:

ulimit -c unlimited 

同时检查:

$ sysctl kernel.core_pattern 

,看看你的转储创建(%E会的进程名,并%T将系统时间)。

您可以在/etc/sysctl.conf中将其更改,然后通过sysctl -p重新加载。

您可以通过测试:

sleep 10 & 
killall -SIGSEGV sleep 

如果核心倾销成功,你会看到后分段故障指示“(核心转储)”。

参见:

How to generate a stacktrace when my gcc C++ app crashes


Ubuntu的

如果你已经Ubuntu的,由apport/var/crash创建了转储,但在不同的格式(编辑文件看见)。

请阅读更多:

https://wiki.ubuntu.com/Apport


OS X

在OS X,你的崩溃转储自动Crash Reporter在回溯的形式创建的。 通过执行Console并转到“用户诊断报告”部分(位于“诊断和使用信息”组下)或您可以在~/Library/Logs/DiagnosticReports中找到这些崩溃文件。

实际的核心文件在/cores中生成。

了解更多:How to generate core dumps in Mac OS X?

+0

用'睡眠10 killall -SIGSEGV sleep' HOWTO选项添加到repoen或保持封闭的应用程序? – 2017-05-27 16:20:33

+0

@ e-info128一旦进程死于SIGSEGV信号(基本崩溃),您无法重新打开它。你需要重新开始一个新的进程,除非它是一个服务,所以它可以自动重新生成。 – kenorb 2017-05-29 15:32:04