【发布时间】:2011-05-27 12:28:06
【问题描述】:
我想知道如何在 Ubuntu 中生成核心转储文件。我正在使用 Ubuntu 8.04.1 和 gcc 编译器 4.2.3。我编写了一个简单的 C 程序来生成核心转储。我已将程序编译为 -- gcc -g badpointer.c 。当我运行程序时,它给出了分段错误,但没有生成核心转储。为了生成核心转储文件,我还需要做哪些其他事情?
【问题讨论】:
我想知道如何在 Ubuntu 中生成核心转储文件。我正在使用 Ubuntu 8.04.1 和 gcc 编译器 4.2.3。我编写了一个简单的 C 程序来生成核心转储。我已将程序编译为 -- gcc -g badpointer.c 。当我运行程序时,它给出了分段错误,但没有生成核心转储。为了生成核心转储文件,我还需要做哪些其他事情?
【问题讨论】:
通过以下命令激活您的核心转储:
ulimit -c unlimited
另外,通过以下方式检查 core_pattern 值:
sysctl kernel.core_pattern
查看创建转储的位置(%e 将是进程名称,%t 将是系统时间)。
您可以在 /etc/sysctl.conf 中更改它,然后通过sysctl -p 重新加载。
您可以通过以下方式对其进行测试:
sleep 10 &
killall -SIGSEGV sleep
如果核心转储成功,您将在分段错误指示后看到“(核心转储)”。否则,请再次仔细检查您的 ulimits。
另见:
Ubuntu
如果你有 Ubuntu,你的转储是由Apport 在/var/crash 创建的,但是默认情况下它是禁用的。
更多详情请查看:Where do I find the core dump in Ubuntu?
在 macOS 中,故障转储由 Crash Reporter 以回溯的形式自动创建。
您可以通过执行Console 并转到“用户诊断报告”部分(在“诊断和使用信息”组下)找到这些崩溃文件,或者您可以在~/Library/Logs/DiagnosticReports 中找到它们。
实际的核心文件是在/cores中生成的。
【讨论】:
sleep 10 & killall -SIGSEGV sleep 如何添加选项以回购或保持关闭的应用程序?
检查ulimit -c的输出,如果输出为0,这就是你没有核心转储的原因。
使用
ulimit -c unlimited
允许创建核心(可能将unlimited 替换为实际大小限制以更安全)。
【讨论】:
使用ulimit -cSIZE 设置最大核心转储大小。
【讨论】: