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

source lines while debugging a core dump

本文关键字:源代码 核心 转储 调试      更新时间:2023-10-16

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

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

list Display lines of a source file

将给出当前正在执行的代码部分。以同样的方式,我们在查看核心转储时有选择权吗?我正在处理solaris mdb

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

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

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

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

请参阅gdb手册的第13章和第15章,以帮助gdb访问源文件。

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

可以使用list(l)命令来显示源线。

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

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