1

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

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

list Display lines of a source file

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

4

3 回答 3

2

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

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

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

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

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

于 2012-04-02T07:37:40.993 回答
0

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

于 2012-04-02T07:21:39.903 回答
0

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

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

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

于 2012-04-02T07:19:38.950 回答