我正在使用GNU autotools的项目中工作,因此为了使用gdb调试代码,我正在libtool中运行gdb:
libtool --mode=execute gdbtui foobar
是否有可能重新加载项目的修改版本而不必退出gdb / libtool并重新启动的烦恼?
libtool --mode=execute
创建一个临时可执行文件,该文件将传递给gdb。重建时将删除此可执行文件。诀窍是使用类似
libtool --mode=execute echo ./hello
(Libtool将重新创建临时可执行文件,并将其名称传递给echo
命令。您可以使用任何其他命令代替echo
,例如true
来抑制输出,甚至不存在该命令。]
要重新加载可执行文件,请使用gdb file
filename
命令文件。 gdb在启动时显示可执行的真实姓名:
file
也由gdb filename
命令显示:
$ libtool --mode=execute gdb --args ./hello
...
Reading symbols from /path/to/.libs/lt-hello...done.
(gdb)
当然,也要使用上面的info inferiors
命令。
很难分辨您到底在问什么,但我希望我能正确理解您。
是,您通常可以从info inferiors
内再次运行调试的命令,只要它首先以(gdb) info inferiors
Num Description Executable
* 1 <null> /path/to/.libs/lt-hello
开头即可。实际上,这是echo
的常用工作流程。在一个窗口/选项卡/窗格中使用它可以调试您的内容,并在另一个窗口/选项卡/窗格中修复代码,在第三个窗口中进行重建,等等。
gdb
的一种启动方式是:
gdb
另一个是:
gdb
在后一种情况下,您无论如何只能从gdb提示符启动程序,如下所示。
gdb
在以前,参数是隐含(并由# gdb --args command arg1 arg2 ...
记住)。无论哪种情况,您都可以使用:
# gdb command
通常,一旦您击中,分析并修复了一个错误,便仅使用(gdb) run arg1 arg2 ...
(可重用先前的参数)重新运行该程序并验证该修复程序或继续调试另一个问题,然后重新生成该程序。
基于@Ilia的答案(以及有关如何将可执行文件名称解析为gdb变量的gdb
答案),解决方案是在(gdb) show args
中定义以下run
命令:
this