在Ubuntu中如何生成核心转储文件

33

我想知道如何在Ubuntu上生成核心转储文件。 我正在使用Ubuntu 8.04.1和gcc编译器4.2.3。 我编写了一个简单的C程序来生成核心转储。 我已经按照以下方式编译了该程序 -- gcc -g badpointer.c。当我运行该程序时,它会出现分段错误,但没有生成核心转储文件。我需要做哪些额外的工作才能生成核心转储文件?

3个回答

66

Linux

通过以下命令激活您的核心转储:

ulimit -c unlimited

此外,通过以下方式检查core_pattern值:

sysctl kernel.core_pattern

查看您的转储文件创建位置(%e将是进程名称,%t将是系统时间)。

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

您可以通过以下方式进行测试:

sleep 10 &
killall -SIGSEGV sleep

如果核心转储成功,您将在分段错误指示后看到“(core dumped)”。否则,请再次检查您的ulimit
另请参见:

Ubuntu

如果你使用的是Ubuntu系统,你的转储文件是由Apport/var/crash目录下创建的,但默认情况下它是禁用的。

更多详情请查看:在Ubuntu中如何找到核心转储文件?


macOS/OS X

在 macOS 中,崩溃转储文件以回溯形式由Crash Reporter自动生成。您可以通过执行 Console 并转到“用户诊断报告”部分(在“诊断和使用信息”组中),或者您可以在 ~/Library/Logs/DiagnosticReports 找到这些崩溃文件。

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

阅读更多: 如何在 Mac OS X 中生成核心转储文件?


使用 sleep 10&killall -SIGSEGV sleep 如何添加选项以重新打开或保持关闭的应用程序? - e-info128
@e-info128 当进程因为SIGSEGV信号(基本上是崩溃)而死亡后,您无法重新打开它。除非它是一个服务,否则您需要再次启动一个新的进程,以便它可以自动重生。 - kenorb

36

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

使用

ulimit -c unlimited

允许核心创建(可能用实际大小限制替换 unlimited 以增加安全性)。


0

使用ulimit -cSIZE设置最大核心转储大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接