2016-12-01 60 views
1

我想要做這樣的事情,但無法弄清楚正確的GDB命令。連接GDB便利變量

比方說,我開始調試一個進程,並有一個文件,我想作爲參數傳遞給該進程。我想用一個GDB命令腳本,將看起來像這樣來構造這個文件的名稱在運行時:

set $var1 = "path" 
set $var2 = "to" 
set $var3 = "file" 
set $var4 = $var1+"/"+$var2+"/"+$var3 
file /process/to/debug 
run params $var4 

回答

2

有沒有真正的好內置的方式做到這一點:-(

你可能像我一樣,可以使用eval命令,但是,對於字符串替換的具體情況,eval需要劣等(FWIW,這對我來說似乎是一個gdb的bug)

也就是說,這是有效的:

(gdb) set $v1 = 7 
(gdb) eval "set $v2 = \"%d\"", $v1 
(gdb) p $v2 
$1 = "7" 

但這並不:

(gdb) set $v3 = "hi" 
(gdb) eval "set $v4 = \"%s\"", $v3 
evaluation of this expression requires the target program to be active 

還有你可以用兩種途徑。

的傳統,一個是結合使用set loggingoutputprintf將無法​​正常工作 - 它失敗,就像上面那樣),也許shell sed或類似的,把字符串到一個文件中的一些gdb命令。然後source那個文件。

另一種方法是編寫一些Python代碼來做到這一點。你可以寫一個連接字符串的便利函數,或者你可以編寫一個新的命令來完成你想要的任何事情。

+0

謝謝。是啊。 gdb中的腳本並不是最好的。我可能應該減少我的損失,去蟒蛇。 – honkaboy