4

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

libtool --mode=execute gdbtui foobar

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

4

3 回答 3

2

libtool --mode=execute创建一个传递给 gdb 的临时可执行文件。此可执行文件在重建时被删除。诀窍是用类似的东西重新创建它

libtool --mode=execute echo ./hello

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

要重新加载可执行文件,请使用 gdbfilefilename命令文件。启动时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命令。

于 2014-06-05T19:03:22.160 回答
0

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

是的,您通常可以从内部再次运行已调试的命令gdb,只要它是首先启动gdb的。事实上,这是gdb. 在一个窗口/选项卡/窗格中使用它来调试你的东西并在另一个中修复代码,在第三个中重建等等。

一种gdb开始的方法是:

# gdb --args command arg1 arg2 ...

另一个是:

# gdb command

在后一种情况下,无论如何您只能像这样从 gdb 提示符启动程序。

(gdb) run arg1 arg2 ...

在前者中,参数是隐含的(并被 记住gdb)。无论哪种情况,您都可以在事后使用以下方法检索参数:

(gdb) show args

一旦你遇到、分析和修复了一个错误,重新运行它run(它重用以前的参数)并验证修复或继续调试另一个问题,这是很常见的。

于 2013-02-28T19:48:58.513 回答
0

根据@Ilia 的回答(以及关于如何将可执行文件名称解析为 gdb 变量的回答),解决方案是在以下位置定义以下custom make命令~/.gdbinit

define lmake
  python gdb.execute('set $f = "' + str(gdb.selected_inferior().progspace.filename) + '"')
  make
  eval "file %s", $f
end

于 2020-05-31T22:16:56.260 回答