【问题标题】:How to enable core dump in my Linux C++ program [duplicate]如何在我的 Linux C++ 程序中启用核心转储 [重复]
【发布时间】:2010-05-27 07:59:06
【问题描述】:

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

【问题讨论】:

    标签: c++ linux crash-dumps


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我从终端窗口(Ubuntu)执行了“ulimit -c unlimited”,然后从同一个窗口执行了我的程序,它创建了核心转储。如何将此模式设为默认模式?当我从键盘快捷键执行程序时,不会创建转储。
    • 1) setrlimit 是一种从程序中设置核心文件大小的方法。 2) 或在您的个人资料中设置ulimit -c unlimited
    • 将该行放入您的~/.profile
    • 在 ubuntu 14.04 gedit ~/.bashrc 上并将 ulimit -c unlimited 添加到文件末尾并保存。
    【解决方案2】:

    你可以在程序中这样做:

    #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);
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多