1

Python スクリプトを使用して、gdb プロンプト内で Linux コマンド (bt、break、frame など) を実行したいと考えています。例: subprocess.call(["gdb"], shell=True) この行を使用すると、gdbコマンドを実行して(gdb)プロンプトに移動しますが、その後、試し subprocess.call(["backtrace"], shell=True) てみると /bin/sh:backtrace: command not found と表示されます

4

2 に答える 2

2

backtracebreakframe(gdb)などのプロンプトに入力するコマンドは gdb コマンドです。それらを解釈する方法を知っているのは gdb だけであり、後者は Linux 実行可能ファイルしか実行できないため、それらは機能しません。subprocess.call()

目的に近いものを実現するには、次の 2 つの方法があります。

  1. 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も参照してください。
  2. 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 に答える