使用libtool和gdb

时间:2013-02-28 19:12:22

标签: gdb autotools libtool

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

libtool --mode=execute gdbtui foobar

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

3 个答案:

答案 0 :(得分:1)

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

之类的东西重新创建它
libtool --mode=execute echo ./hello

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

要重新加载可执行文件,请使用gdb filefilename命令文件。可执行的实名在开始时由gdb显示:

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

它也由gdb info inferiors命令显示:

(gdb) info inferiors 
  Num  Description       Executable        
* 1    <null>            /path/to/.libs/lt-hello

,当然还有上面的echo命令。

答案 1 :(得分:0)

有点难以辨别出你究竟在问什么,但我希望我能正确理解你。

是的,只要首先从gdb开始,您就可以从gdb内再次运行调试命令。实际上,这是gdb的常见工作流程。在一个窗口/选项卡/窗格中使用它来调试你的东西并在另一个窗口中修改代码,在第三个窗口中重建等。

gdb启动的一种方式就是这个:

# gdb --args command arg1 arg2 ...

另一个是:

# gdb command

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

(gdb) run arg1 arg2 ...

在前者中,参数是暗示(并由gdb记住)。在任何一种情况下,您都可以使用以下方法检索参数:

(gdb) show args

一旦你点击,分析并修复了一个错误,只需使用run(重用前面的参数)重新运行它并验证修复或继续调试另一个问题,这是很常见的。

答案 2 :(得分:0)

基于@Ilia的答案(以及有关如何将可执行文件名称解析为gdb变量的this答案),一种解决方案是在custom make中定义以下~/.gdbinit命令:

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