2017-04-04 65 views
0

如果自上次運行gdb以來發生更改,我只想在遠程gdb目標上刷新代碼。我在gdb腳本中設想了以下內容:針對遠程目標的GDB腳本流程控制

target extended-remote /dev/<device> 
<Attach to Target> 
file <Target Program> 
if ![compare-sections -r] 
    load 
start 

...但是,我看不到如何使命令輸出的條件。

任何人都可以幫忙嗎?我想我可能錯過了什麼,但我不知道什麼......

回答

0

compare-sections命令沒有返回在if語句中可以使用的值,但下面的代碼可以做你想做的。

首先,定義一個convenience function命名$cmdeval將執行一個gdb的命令,並返回其輸出作爲一個字符串:

import gdb 

class CmdEval(gdb.Function): 
    """$cmdeval(str) - evaluate argument string as a gdb command 
    and return the result as a string. 
    """ 

    def __init__(self): 
     super(CmdEval, self).__init__("cmdeval") 

    def invoke(self, gdbcmd): 
     return gdb.execute(gdbcmd.string(), from_tty=False, to_string=True) 

CmdEval() 

你可以把這個在名爲cmdeval.py文件,並鍵入(gdb) source cmdeval.py將其加載到GDB。

其次,由於compare-sections輸出"MIS-MATCHED"爲已更改的任何部分,你可以看看使用$_regex方便的功能,它包含在較新版本的GDB的那個字符串:

(gdb) if $_regex($cmdeval("compare-sections -r"),".*MIS-MATCHED.*") 
>echo need to load again\n 
>end