2016-03-17 68 views
1

我已經建立了一個構建過程,它會生成二進制文件,然後從它們分離調試信息(啓用構建ID)。設置調試文件目錄後再次搜索符號

該版本也可以生成.gdbinit文件,其行數爲set debug-file-directory <dir>,因此調試器可以找到它們(項目中有很多可執行文件和庫)。

但是當我運行$ gdb myprogram時,gdb找不到符號。我必須執行(gdb) file myprogram來重新搜索調試符號文件。看起來.gdbinit在開通myprogram後執行。

如何使它自動?

+0

'.gdbinit'執行。它設置了'debug-file-directory',但它太遲了。 '.gdbinit'文件位於構建目錄中,因爲它們是在那裏生成的。 – Velkan

+0

你確定嗎?你可以檢查「(gdb)show debug-file-directory」嗎?你能提供這個命令的輸出嗎? – pmod

+0

@pmod,是的,它顯示了一個正確的目錄(它來自.gdbinit)。我只需要執行'file myprogram'來真正開始使用它。但是,如果'set debug-file-directory

'位於home dir的'〜/ .gdbinit'中,它會立即應用,所以'$ gdb myprogram'就足夠了。 – Velkan

回答

2

基本上,.gdbinit文件用於設置調試環境(添加別名長命令,負載的自定義命令,設置打印模式等),而不是一個特定的調試會話

考慮看看gdb startup order,並考慮到家庭.gdbinit工程確定,它不能與當地.gdbinit文件實現(操作的順序應該是組調試文件目錄文件) 。我想你可以修改你的編譯/調試過程中使用gdb的包裝腳本使用gdb命令腳本(同.gdbinit但稱之爲start.gdb例如,以避免混淆):

gdb_x: 
#!/bin/sh 
gdb -x ./start.gdb "[email protected]" 

start.gdb: 
# this file is generated for .. by ... 
set debug-file-directory <> 
set debug-file-directory <> 

或者,作爲一種解決方法如果你可以用命令將運行兩次的事實袒露:

gdb -x ./.gdbinit <> 

可與避免(和包裝腳本再次值得):

gdb -iex "set auto-load local-gdbinit off" -x ./.gdbinit <> 
+1

我放棄了。我將把項目的所有調試文件分組到一個目錄中,並編輯全局的'.gdbinit'。這是一個每個項目的配置,但至少對於人們來說不是太混亂。 – Velkan