2013-05-06 31 views

回答

2

backtrace ISN」一個linux命令,這是一個gdb命令。

如果你想命令發送到popen'd GDB會話,你必須通過stdin推他們,像...

import subprocess 

gdb = subprocess.Popen(['gdb'], stdin=subprocess.PIPE) 
gdb.stdin.write('backtrace\n') 
2

命令鍵入到(gdb)提示像回溯,break,frame等都是gdb命令。只有gdb知道如何解釋它們,並且它們不能與subprocess.call()一起工作,因爲後者只能運行Linux可執行文件。

有兩種方法實現了接近你想要什麼:

  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 Reference)例如

保存這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 
$ 
相關問題