Linux 设置调试文件目录后再次搜索符号

Linux 设置调试文件目录后再次搜索符号,linux,debugging,gdb,Linux,Debugging,Gdb,我已经建立了一个生成二进制文件的构建过程,然后将调试信息从中分离出来(构建ID已启用) 构建还可以生成.gdbinit文件,其中包含set debug file directory这样的行,以便调试器可以找到它们(项目中有许多可执行文件和库) 但是当我运行$gdb myprogram时,gdb找不到符号。我必须执行(gdb)file myprogram来重新搜索调试符号文件。似乎.gdbinit是在打开myprogram后执行的 如何使其自动化?基本上,.gdbinit文件用于设置调试环境(为长

我已经建立了一个生成二进制文件的构建过程,然后将调试信息从中分离出来(构建ID已启用)

构建还可以生成
.gdbinit
文件,其中包含
set debug file directory
这样的行,以便调试器可以找到它们(项目中有许多可执行文件和库)


但是当我运行
$gdb myprogram
时,gdb找不到符号。我必须执行
(gdb)file myprogram
来重新搜索调试符号文件。似乎
.gdbinit
是在打开
myprogram
后执行的

如何使其自动化?

基本上,.gdbinit文件用于设置调试环境(为长命令添加别名、加载自定义命令、设置打印模式等),而不是特定的调试会话

查看并考虑到home.gdbinit工作正常,使用本地.gdbinit文件无法实现(操作顺序应为设置调试文件目录文件)。我认为您可以修改您的构建/调试过程,以便将gdb包装器脚本与gdb命令脚本一起使用(与.gdbinit相同,但例如称之为start.gdb以避免混淆):

gdb_x:
#!/垃圾箱/垃圾箱
gdb-x./start.gdb“$@”
start.gdb:
#此文件是为..生成的。。通过
设置调试文件目录
设置调试文件目录
或者,作为一种解决方法,如果您可以简单地知道命令将运行两次:

gdb -x ./.gdbinit <>
gdb-x./.gdbinit
这可以通过以下方式避免(并再次使用包装器脚本):

gdb-iex“设置自动加载本地gdbinit关闭”-x./.gdbinit

执行
.gdbinit
。它设置了
调试文件目录
,但这样做太晚了。
.gdbinit
文件在生成目录中,因为它们是在那里生成的。你确定吗?你能用“(gdb)显示调试文件目录”检查吗?你能提供这个命令的输出吗?@pmod,是的,它显示了一个正确的目录(它是从.gdbinit获得的)。我只需要执行
文件myprogram
就可以真正开始使用它。但是如果
设置调试文件目录
在home目录的
~/.gdbinit
中,它会立即应用,因此
$gdb myprogram
就足够了。您可以检查“(gdb)show auto load local gdbinit”吗?当禁用
添加自动加载安全路径
并找到本地
.gdbinit
时,它会大声抱怨。所以,“从当前目录自动加载.gdbinit脚本已打开”。我放弃。我将把项目的所有调试文件分组到一个目录中,并编辑全局
.gdbinit
。这是一个每个项目的配置,但至少不会让人太困惑。
gdb -x ./.gdbinit <>
gdb -iex "set auto-load local-gdbinit off" -x ./.gdbinit <>