2017-04-04 5 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ステートメントで使用できる値を返さないが、次のようにしてもよい。

まず、GDBのコマンドを実行し、文字列としてその出力を返します$cmdevalという名前convenience functionを定義します。

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にロードするために(gdb) source cmdeval.pyを入力することができます。

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

次は、変更された任意のセクションのためのcompare-sections出力"MIS-MATCHED"いるので、あなたはGDBの最近のバージョンに含まれている$_regex便利な機能を使用して、その文字列を探すことができます

関連する問題