85

我的程序是用 C++ 编写的。使用 gcc 编译,使用 -g3 -O0 -ggdb 标志。当它崩溃时,我想打开它的核心转储。它是创建核心转储文件,还是我需要在程序本身或执行它的计算机上创建核心转储文件?这个文件是在哪里创建的,它的名字是什么?

4

3 回答 3

110

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

于 2010-05-27T08:02:54.427 回答
53

您可以在程序中这样做:

#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);
于 2013-03-13T20:31:16.037 回答
14

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

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

于 2010-05-27T08:03:59.243 回答