2016-06-18 28 views
1

私はGDB/MI用のラッパーを書いていますが、私はMIインターフェースでいくつかのコマンドを見逃しています。たとえば、 'info variables'コマンドです。私は "-interpreter-exec console"でそれを実行することができますが、コンソールレコードにはすべてを書き込み、結果レコードには書き込まないので、出力を得るのは難しいです。だから私はプロンプト( "(gdb)"行)と "^ done"レコードの間ですべてのコンソールレコードを取り出し、連結して結果として返すことにしました。私の質問は - これは安全ですか?このアプローチはエラーが起こりやすいと思われますが、他には何も考えていません。アイデア?GDB/MIで-interpreter-execの出力を取得する方法は?

UPDATE: また、この-interpreter-exec console "python\nprint(gdb.execute('info variables', False, True))\n"のようなのpythonを使用すると便利かもしれないとの結果がいいです1行に表示されますが、まだどのように私は無事、まさにこの行を得るのですか?たぶん私はいくつかのトークンを前もって置いておくべきです...とにかく、gdb.executeの3番目の引数は一般的にはサポートされていないようですので、それに頼るのは良い考えではないかもしれません。

答えて

1

実際、gdb.executeの3番目の引数は、2011年のgdb 7.3で実際にサポートされていますので、それを使用しても問題ありません。だから私は-interpreter-exec console "concat token info variables"のようにそれを実行し

import gdb 
import sys 


class ConcatCommand(gdb.Command): 
    """Executes a command and print concatenated results with a prefix.""" 

def __init__(self): 
    super(ConcatCommand, self).__init__("concat", gdb.COMMAND_USER) 

def invoke(self, arg, from_tty): 
    pair = arg.partition(' ') 
    sys.stdout.write(pair[0] + gdb.execute(pair[2], False, True)) 
    sys.stdout.flush() 

ConcatCommand() 

このコマンドを使用して行くことにしました。次に、トークンで始まるコンソールレコードの内容を取ります。

関連する問題