如何通过子进程提供多个GDB命令?

时间:2015-02-19 11:16:50

标签: python python-2.7 python-3.x gdb

在我开始运行调用gdb并暂停到Gdb提示符的shell脚本后,我需要提供Gdb命令。因此,要加载并执行图像(.elf)文件,我将调用以下子进程:

import subprocess
os.chdir(r"/project/neptune_psv/fw/")
print os.getcwd()

proc = subprocess.Popen('./Execute.sh -i TestList_new.in -m 135.20.230.160 -c mpu',shell = True,stdin = subprocess.PIPE)

在Execute.sh停止到Gdb提示后,我需要提供两个Gdb命令:

  1. 设置* 0x44880810 = 3(设置寄存器值)
  2. 继续
  3. 任何人都可以帮助我如何通过stdin提供这两个命令吗?

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是使用类似pexpect的东西,这是Python中的一个期望克隆。这提供了一种以编程方式控制其他交互式过程的方法。

但是,由于您专门使用gdb,请注意这不是驱动gdb的最佳方法。有两种更好的方法。首先,您可以使用其内置的Python API直接编写gdb。如果您的用例可以使用,这是最好的方法,因为它比尝试解析输出要简单得多。但是,如果必须解析输出,则应调查“MI”。这是gdb的“机器接口”,它提供了一种模糊的类JSON(它早于真正的JSON)控制gdb的方式。有可用的MI解析库,虽然我不记得是否有用Python编写的。