我正在开发一个使用GNU autotools的项目,所以为了使用gdb调试代码,我在libtool中运行gdb:
libtool --mode=execute gdbtui foobar
是否可以重新加载项目的修改版本,而不必烦恼不得不退出gdb / libtool并重启?
答案 0 :(得分:1)
libtool --mode=execute
创建一个临时可执行文件,传递给gdb。重建时删除此可执行文件。诀窍是用
libtool --mode=execute echo ./hello
(Libtool将重新创建临时可执行文件并将其名称传递给echo
命令。您可以使用任何其他命令而不是echo
,例如true
来抑制输出,甚至非现有的。)
要重新加载可执行文件,请使用gdb file
filename
命令文件。可执行的实名在开始时由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