Python スクリプトを使用して、gdb プロンプト内で Linux コマンド (bt、break、frame など) を実行したいと考えています。例: subprocess.call(["gdb"], shell=True)
この行を使用すると、gdbコマンドを実行して(gdb)プロンプトに移動しますが、その後、試し
subprocess.call(["backtrace"], shell=True)
てみると /bin/sh:backtrace: command not found と表示されます
1877 次
2 に答える
2
backtrace、break、frame(gdb)
などのプロンプトに入力するコマンドは gdb コマンドです。それらを解釈する方法を知っているのは gdb だけであり、後者は Linux 実行可能ファイルしか実行できないため、それらは機能しません。subprocess.call()
目的に近いものを実現するには、次の 2 つの方法があります。
- Python の制御下で GDB を開始し、GDB/MIプロトコルを使用して対話します。これがpyclewnの仕組みです。例
p = subprocess.Popen(['gdb', '-i=mi'], stdin=fd_in, stdout=fd_out)
。https://bitbucket.org/minami/python-gdb-mi/src/tip/gdbmi/session.py?at=defaultも参照してください。 - GDB の組み込み Python スクリプトを使用します。( API リファレンス) 例
これをt.pyに保存します
import gdb
gdb.execute('set confirm off')
gdb.execute('file /bin/true')
gdb.execute('start')
gdb.execute('backtrace')
gdb.execute('quit')
次に実行します。
$ gdb -q -x t.py
Temporary breakpoint 1 at 0x4014c0: file true.c, line 59.
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffde28) at true.c:59
59 if (argc == 2)
#0 main (argc=1, argv=0x7fffffffde28) at true.c:59
$
于 2013-05-06T15:49:47.473 に答える