【发布时间】:2010-05-27 07:59:06
【问题描述】:
我的程序是用 C++ 编写的。使用 gcc 编译,使用 -g3 -O0 -ggdb 标志。当它崩溃时,我想打开它的核心转储。它是创建核心转储文件,还是我需要在程序本身或执行它的计算机上创建核心转储文件?这个文件是在哪里创建的,它的名字是什么?
【问题讨论】:
标签: c++ linux crash-dumps
我的程序是用 C++ 编写的。使用 gcc 编译,使用 -g3 -O0 -ggdb 标志。当它崩溃时,我想打开它的核心转储。它是创建核心转储文件,还是我需要在程序本身或执行它的计算机上创建核心转储文件?这个文件是在哪里创建的,它的名字是什么?
【问题讨论】:
标签: c++ linux crash-dumps
您需要设置ulimit -c。如果此参数为 0,则不会创建核心转储文件。所以这样做:ulimit -c unlimited 并检查一切是否正确ulimit -a。 coredump 文件是在应用程序完成某些不适当的操作时创建的。我系统上的文件名是core.<process-pid-here>。
【讨论】:
setrlimit 是一种从程序中设置核心文件大小的方法。 2) 或在您的个人资料中设置ulimit -c unlimited。
~/.profile。
gedit ~/.bashrc 上并将 ulimit -c unlimited 添加到文件末尾并保存。
你可以在程序中这样做:
#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);
【讨论】:
默认情况下,许多配置文件的核心文件大小默认为 0,因为普通用户不知道如何处理它们。
在运行您的程序之前尝试ulimit -c unlimited。
【讨论】: