我想知道如何在Ubuntu中生成核心转储文件。我使用的是Ubuntu 8.04.1和gcc编译器4.2.3。我编写了一个简单的C程序来生成核心转储。我已经将程序编译为 - gcc -g badpointer.c。当我运行程序时,它会给出分段错误,但不会生成核心转储。我还需要做些什么才能生成核心转储文件?
答案 0 :(得分:48)
通过以下方式激活您的coredump:
ulimit -c unlimited
另外,请检查:
$ sysctl kernel.core_pattern
查看转储的创建位置(%e
将是进程名称,%t
将是系统时间。
您可以在/etc/sysctl.conf中更改它,然后按sysctl -p
重新加载。
您可以通过以下方式进行测试:
sleep 10 &
killall -SIGSEGV sleep
如果核心转储成功,您将在分段故障指示后看到“(core dumped)”。
另见:
<强> Ubuntu的强>
如果您使用的是Ubuntu,则转储是由/var/crash
中的Apport创建的,但默认情况下会被禁用。
有关详情,请查看:Where do I find the core dump in Ubuntu?
在macOS中,Crash Reporter以回溯的形式自动创建崩溃转储。
您可以通过执行Console并转到“用户诊断报告”部分(在“诊断和使用信息”组下)找到这些崩溃文件,也可以在~/Library/Logs/DiagnosticReports
中找到它们。
实际核心文件在/cores
生成。
答案 1 :(得分:35)
检查ulimit -c
的输出,如果输出0,这就是你没有核心转储的原因。
使用
ulimit -c unlimited
允许核心创建(可能会将unlimited
替换为实际大小限制以更安全)。
答案 2 :(得分:0)
使用ulimit -c
SIZE 设置最大核心转储大小。