首页 > 解决方案 > 加载符号后 GDB 自动执行命令

问题描述

我正在用 GDB 遥控器调试一个微控制器。我有多个构建目标,我希望有一个通用的 .gdbinit 文件用于刷新和/或调试所有不同的目标。

我正在使用 BAT 脚本启动 GDB,其中可调试的 .elf 文件作为 GDB 的参数给出。这样 GDB 将加载符号,并且我的 .gdbinit 也正在正确运行。

我的 gdbinit:

define target hookpost-remote
    echo POST TARGET REMOTE\n
    # do stuff
    #load ./path/to/foo.elf # I don't want this
    load # This works if and only if the .elf has been loaded already
    monitor reset
    quit
end

target remote tcp:localhost:2331

问题是 gdbinit 已运行,并且在加载二进制文件之前发出了“目标远程”命令,GDB 将产生错误:

.gdbinit:15: Error in sourced command file: No executable file specified. Use the "file" or "exec-file" command.

之后直接:

Reading symbols from path/to/foo.elf

如果我从 gdbinit 中删除“目标远程”命令并在 GDB 控制台中手动调用它,一切正常,但我不想这样做,我想自动化一切。

加载符号后如何自动执行命令?在 GDB 完成初始化和运行 gdbinit 之后,是否会触发某种钩子?我可以挂钩发布阅读符号吗?

标签: armgdbembeddedelfgdbinit

解决方案


您可能正在使用.gdbinit某些目的,包括通过-x [cmds_file]命令行选项传递的命令文件可以更好地完成某些目的。

一个小实验表明,在程序文件加载之前.gdbinit运行,而文件.-x


推荐阅读