Python Scripting:如何使用python脚本在gdb提示符下执行unix命令..?

时间:2013-05-06 15:15:28

标签: python gdb

我想使用python脚本在gdb提示符中执行linux命令(例如.bt,break,frame等)。 例如:我正在使用subprocess.call(["gdb"], shell=True) 这行通过执行gdb命令将我带到(gdb)提示符,但在我尝试之后     subprocess.call(["backtrace"], shell=True) 它显示/ bin / sh:backtrace:命令未找到

2 个答案:

答案 0 :(得分:2)

backtrace不是linux命令,它是gdb命令。

如果你想将命令发送到popen'dg会话,你必须通过stdin推送它们,比如......

import subprocess

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

答案 1 :(得分:2)

您在{{1>}提示中输入的命令,如回溯中断框架等,都是gdb命令。只有gdb知道如何解释它们,它们不能与(gdb)一起使用,因为后者只能运行Linux可执行文件。

有两种方法可以达到你想要的效果:

  1. 在Python的控制下启动GDB并使用GDB/MI协议与之通信。这就是pyclewn的工作原理。例如。 subprocess.call()。另请参阅https://bitbucket.org/minami/python-gdb-mi/src/tip/gdbmi/session.py?at=default
  2. 使用GDB的内置Python脚本。 (API Reference)例如
  3. 将此项保存到 t.py

    p = subprocess.Popen(['gdb', '-i=mi'], stdin=fd_in, stdout=fd_out)

    然后运行:

    import gdb
    
    gdb.execute('set confirm off')
    gdb.execute('file /bin/true')
    gdb.execute('start')
    gdb.execute('backtrace')
    gdb.execute('quit')