使用libtool e gdb

问题描述 投票:4回答:3

我正在使用GNU autotools的项目中工作,因此为了使用gdb调试代码,我正在libtool中运行gdb:

libtool --mode=execute gdbtui foobar

是否有可能重新加载项目的修改版本而不必退出gdb / libtool并重新启动的烦恼?

gdb autotools libtool
3个回答
2
投票

libtool --mode=execute创建一个临时可执行文件,该文件将传递给gdb。重建时将删除此可执行文件。诀窍是使用类似

的方式重新创建它
libtool --mode=execute echo ./hello

(Libtool将重新创建临时可执行文件,并将其名称传递给echo命令。您可以使用任何其他命令代替echo,例如true来抑制输出,甚至不存在该命令。]

要重新加载可执行文件,请使用gdb filefilename命令文件。 gdb在启动时显示可执行的真实姓名:

file

也由gdb filename命令显示:

$ libtool --mode=execute gdb --args ./hello
...
Reading symbols from /path/to/.libs/lt-hello...done.
(gdb)

当然,也要使用上面的info inferiors命令。


0
投票

很难分辨您到底在问什么,但我希望我能正确理解您。

是,您通常可以从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 ... (可重用先前的参数)重新运行该程序并验证该修复程序或继续调试另一个问题,然后重新生成该程序。


0
投票

基于@Ilia的答案(以及有关如何将可执行文件名称解析为gdb变量的gdb答案),解决方案是在(gdb) show args 中定义以下run命令:

this
© www.soinside.com 2019 - 2024. All rights reserved.