这个问题在这里已有答案:
我想知道如何在Ubuntu中生成核心转储文件 . 我使用的是Ubuntu 8.04.1和gcc编译器4.2.3 . 我编写了一个简单的C程序来生成核心转储 . 我已经将程序编译为 - gcc -g badpointer.c . 当我运行程序时,它会给出分段错误,但不会生成核心转储 . 我还需要做些什么才能生成核心转储文件?
通过以下方式激活您的coredumps:
ulimit -c unlimited
另外,检查:
$ sysctl kernel.core_pattern
查看转储的创建位置( %e 将是进程名称, %t 将是系统时间) .
%e
%t
您可以在/etc/sysctl.conf中更改它,然后通过 sysctl -p 重新加载 .
sysctl -p
您可以通过以下方式测试:
sleep 10 & killall -SIGSEGV sleep
如果核心转储成功,您将在分段故障指示后看到“(core dumped)” .
也可以看看:
How to generate a core dump in Linux when a process gets a segmentation fault?
How to automatically generate a stacktrace when my program crashes
Ubuntu
如果您使用的是Ubuntu,则转储是由Apport在 /var/crash 中创建的,但默认情况下它被禁用 .
/var/crash
有关详细信息,请查看:Where do I find the core dump in Ubuntu?
在macOS中,故障转储由Crash Reporter以回溯的形式自动创建 . 您可以通过执行Console并转到'User Diagnostic Reports'部分(在'Diagnostic and Usage Information'组下)找到这些崩溃文件,或者您可以在 ~/Library/Logs/DiagnosticReports 中找到它们 .
~/Library/Logs/DiagnosticReports
实际核心文件在 /cores 中生成 .
/cores
阅读更多:How to generate core dumps in Mac OS X?
检查 ulimit -c 的输出,如果输出0,这就是你没有核心转储的原因 .
ulimit -c
使用
允许核心创建(可能用实际大小限制替换 unlimited 以更安全) .
unlimited
使用 ulimit -c SIZE设置最大核心转储大小 .
3 回答
Linux
通过以下方式激活您的coredumps:
另外,检查:
查看转储的创建位置(
%e
将是进程名称,%t
将是系统时间) .您可以在/etc/sysctl.conf中更改它,然后通过
sysctl -p
重新加载 .您可以通过以下方式测试:
如果核心转储成功,您将在分段故障指示后看到“(core dumped)” .
也可以看看:
How to generate a core dump in Linux when a process gets a segmentation fault?
How to automatically generate a stacktrace when my program crashes
Ubuntu
如果您使用的是Ubuntu,则转储是由Apport在
/var/crash
中创建的,但默认情况下它被禁用 .有关详细信息,请查看:Where do I find the core dump in Ubuntu?
macOS / OS X.
在macOS中,故障转储由Crash Reporter以回溯的形式自动创建 . 您可以通过执行Console并转到'User Diagnostic Reports'部分(在'Diagnostic and Usage Information'组下)找到这些崩溃文件,或者您可以在
~/Library/Logs/DiagnosticReports
中找到它们 .实际核心文件在
/cores
中生成 .阅读更多:How to generate core dumps in Mac OS X?
检查
ulimit -c
的输出,如果输出0,这就是你没有核心转储的原因 .使用
ulimit -c unlimited
允许核心创建(可能用实际大小限制替换
unlimited
以更安全) .使用
ulimit -c
SIZE设置最大核心转储大小 .