如何在我的Linux C ++程序中启用核心转储

时间:2010-05-27 07:59:07

标签: c++ linux crash-dumps

我的程序是用C ++编写的。用gcc编译,使用-g3 -O0 -ggdb标志。当它崩溃时,我想打开它的核心转储。它是创建核心转储文件,还是我需要在程序本身或执行它的计算机上执行某些操作以启用核心转储?创建此文件的位置,名称是什么?

3 个答案:

答案 0 :(得分:100)

您需要设置ulimit -c。如果此参数的值为0,则不会创建coredump文件。这样做:ulimit -c unlimited并检查一切是否正确ulimit -a。当应用程序完成不适当的操作时,会创建coredump文件。我系统上的文件名是core.<process-pid-here>

答案 1 :(得分:46)

你可以在程序中这样做:

#include <sys/resource.h>

// core dumps may be disallowed by parent of this process; change that
struct rlimit core_limits;
core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &core_limits);

答案 2 :(得分:12)

默认情况下,许多配置文件默认为0核心文件大小,因为普通用户不知道如何处理它们。

在运行程序之前尝试ulimit -c unlimited