【问题标题】:How to generate core dump file in Ubuntu [duplicate]如何在 Ubuntu 中生成核心转储文件 [重复]
【发布时间】:2011-05-27 12:28:06
【问题描述】:

我想知道如何在 Ubuntu 中生成核心转储文件。我正在使用 Ubuntu 8.04.1 和 gcc 编译器 4.2.3。我编写了一个简单的 C 程序来生成核心转储。我已将程序编译为 -- gcc -g badpointer.c 。当我运行程序时,它给出了分段错误,但没有生成核心转储。为了生成核心转储文件,我还需要做哪些其他事情?

【问题讨论】:

    标签: c coredump


    【解决方案1】:

    Linux

    通过以下命令激活您的核心转储:

    ulimit -c unlimited
    

    另外,通过以下方式检查 core_pattern 值:

    sysctl kernel.core_pattern
    

    查看创建转储的位置(%e 将是进程名称,%t 将是系统时间)。

    您可以在 /etc/sysctl.conf 中更改它,然后通过sysctl -p 重新加载。

    您可以通过以下方式对其进行测试:

    sleep 10 &
    killall -SIGSEGV sleep
    

    如果核心转储成功,您将在分段错误指示后看到“(核心转储)”。否则,请再次仔细检查您的 ulimits。

    另见:


    Ubuntu

    如果你有 Ubuntu,你的转储是由Apport/var/crash 创建的,但是默认情况下它是禁用的。

    更多详情请查看:Where do I find the core dump in Ubuntu?


    macOS/OS X

    在 macOS 中,故障转储由 Crash Reporter 以回溯的形式自动创建。 您可以通过执行Console 并转到“用户诊断报告”部分(在“诊断和使用信息”组下)找到这些崩溃文件,或者您可以在~/Library/Logs/DiagnosticReports 中找到它们。

    实际的核心文件是在/cores中生成的。

    阅读更多:How to generate core dumps in Mac OS X?

    【讨论】:

    • with sleep 10 & killall -SIGSEGV sleep 如何添加选项以回购或保持关闭的应用程序?
    • @e-info128 一旦进程死于 SIGSEGV 信号(基本上崩溃了),你就不能重新打开它。除非它是服务,否则您需要再次启动一个新进程,以便它可以自动重生。
    【解决方案2】:

    检查ulimit -c的输出,如果输出为0,这就是你没有核心转储的原因。

    使用

    ulimit -c unlimited

    允许创建核心(可能将unlimited 替换为实际大小限制以更安全)。

    【讨论】:

      【解决方案3】:

      使用ulimit -cSIZE 设置最大核心转储大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-05
        • 2011-08-01
        • 1970-01-01
        • 2011-09-05
        • 2011-07-04
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        相关资源
        最近更新 更多