我正在开发一个使用 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
抑制输出,甚至是不存在的输出。)
要重新加载可执行文件,请使用 gdbfile
filename
命令文件。启动时gdb显示可执行实名:
$ libtool --mode=execute gdb --args ./hello
...
Reading symbols from /path/to/.libs/lt-hello...done.
(gdb)
它也由 gdbinfo inferiors
命令显示:
(gdb) info inferiors
Num Description Executable
* 1 <null> /path/to/.libs/lt-hello
当然,通过上述echo
命令。
很难辨别你到底在问什么,但我希望我能正确理解你。
是的,您通常可以从内部再次运行已调试的命令gdb
,只要它是首先启动gdb
的。事实上,这是gdb
. 在一个窗口/选项卡/窗格中使用它来调试你的东西并在另一个中修复代码,在第三个中重建等等。
一种gdb
开始的方法是:
# gdb --args command arg1 arg2 ...
另一个是:
# gdb command
在后一种情况下,无论如何您只能像这样从 gdb 提示符启动程序。
(gdb) run arg1 arg2 ...
在前者中,参数是隐含的(并被 记住gdb
)。无论哪种情况,您都可以在事后使用以下方法检索参数:
(gdb) show args
一旦你遇到、分析和修复了一个错误,重新运行它run
(它重用以前的参数)并验证修复或继续调试另一个问题,这是很常见的。
根据@Ilia 的回答(以及关于如何将可执行文件名称解析为 gdb 变量的回答),解决方案是在以下位置定义以下custom make
命令~/.gdbinit
:
define lmake
python gdb.execute('set $f = "' + str(gdb.selected_inferior().progspace.filename) + '"')
make
eval "file %s", $f
end