调试核心转储时的源代码行

时间:2012-04-02 07:14:36

标签: c++ debugging gdb mdb2 dbx

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

例如:在dbx或gdb list命令

中调试正在运行的进程期间

list Display lines of a source file

将提供当前正在执行的代码部分。在查看核心转储时,我们可以选择相同的方式吗? 我正在开发 solaris mdb

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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