【问题标题】:How to know what address a program in Linux crashes at?如何知道 Linux 中的程序在哪个地址崩溃?
【发布时间】:2012-02-02 15:53:26
【问题描述】:

我有一个在 Linux 中运行的程序,它一直在神秘地崩溃。我已经知道知道它在哪里崩溃的一种方法是使用 GDB。但是我不想每次重新启动它时都附加它(因为我正在测试它,所以经常这样做)。有没有其他方法可以做到这一点?

【问题讨论】:

    标签: c++ linux gdb centos


    【解决方案1】:

    首先做一个ulimit -c unlimited,所以程序会留下一个核心转储。 然后,当它崩溃时,使用核心转储调用gdb,以读取 崩溃时程序的状态。

    【讨论】:

    • 是的。我的一个错字。我会解决的。
    【解决方案2】:

    -> 在启用 gdb 标志的情况下编译代码。

    gcc -o -g (假设是c/c++程序)

    -> 使用 gdb 运行可执行文件。 gdb

    在此之后,有一些方法可以找到崩溃位置: 1. 逐步执行。 2.运行代码,它崩溃(如预期),在gdb中输入“where”(不带引号)它给出了回溯。从那里,你可以找到地址。

    这是一个不错的 gdb 快速指南:http://www.cs.cmu.edu/~gilpin/tutorial/

    【讨论】:

      【解决方案3】:

      首先使用ulimit -c unlimited 允许崩溃的程序写入核心转储。

      程序崩溃后,您会找到一个名为 core 的核心转储文件,如果您的程序是多线程的,则可能是 core.<pid>

      您可以使用gdb program core 将其加载到 GDB 以检查崩溃时的状态。

      【讨论】:

        【解决方案4】:

        您可以将操作系统配置为在程序崩溃时转储核心文件。然后,您可以检查内核以确定崩溃位置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-11
          • 2021-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-20
          相关资源
          最近更新 更多