【问题标题】:source lines while debugging a core dump调试核心转储时的源代码行
【发布时间】:2012-04-02 07:14:35
【问题描述】:

在 c 或 c++ 中调试核心转储时,即如果我们留下一个核心转储文件并尝试使用该核心文件进行调试,是否有一种方法可以在转储发生之前查看最后几行代码。堆栈跟踪仅显示函数调用。

例如:在 dbx 或 gdb list 命令中调试正在运行的进程时

list Display lines of a source file

将给出当前正在执行的代码部分。在查看核心转储时,我们是否有相同的选择? 我正在开发 solaris mdb

【问题讨论】:

    标签: c++ debugging gdb mdb2 dbx


    【解决方案1】:

    gdb 中的list 命令应提供源代码行号的详细信息以及核心文件中相应的源代码列表,如果:

    • 编译可执行文件时启用了调试符号(例如 gcc 和 g++ 中的-g
    • 可执行文件的非剥离版本可用(即没有通过运行strip 删除调试信息)
    • 调试器能够找到相关的源文件

    即使无法找到源文件,调试器仍应该能够提供文件和行号,因为行号信息构成调试符号的一部分。此信息应通过bt(回溯)命令以及info symbol 命令提供。

    请注意,即使核心文件是从剥离的可执行文件生成的,只要您有权访问非剥离版本,您就可以在 gdb 中加载它并指定核心文件。

    查看gdb manual 的第 13 章和第 15 章,以帮助 gdb 访问您的源文件。

    【讨论】:

      【解决方案2】:

      如果您使用 -g 选项编译,您可以显示源代码行。在 dbx 中可以使用use 命令设置 dbx 源目录。

      您可以使用list (l) 命令显示源代码行。

      请参阅help 命令以了解如何使用 dbx 和 gdb 命令。

      【讨论】:

        【解决方案3】:

        如果您在 dbx 中使用 use 命令正确设置了源路径或使用 -I 选项启动它,那么在读取源代码行时调试核心转储和正常进程几乎没有任何区别。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-22
          • 2014-01-11
          • 1970-01-01
          • 2012-09-30
          • 2022-08-21
          • 2023-04-11
          相关资源
          最近更新 更多