有没有比使用命令行工具/库(如python中的pexpect)更好的方法来控制gdb?

时间:2016-02-05 23:05:24

标签: python multithreading gdb pexpect

我正在尝试开发一个使用gdb进行基本调试的程序。它从命令行执行gdb,附加到目标进程并提供一些特定命令,然后读取std输出。一开始看起来一切都很好,所以我开始使用python和pexpect。但最近,在考虑未来的实施时,我遇到了一个问题。由于我一次只能从命令行执行一个命令(每个进程只能有一个gdb实例),因此不断请求数据刷新某些UI元素的线程最终会导致混乱。想一想:

1-)GDB停止程序执行命令
2-)在执行代码时阻止其他线程
3-)GDB在执行完成后继续执行程序 4-)其中一个等待线程将立即尝试使用GDB 5-)转到1并重复

我们正在处理的过程将每0.5秒冻结一次,这将是无法忍受的。

因此,我想要实现的是在执行命令时进行多线程处理。我该怎么做?我考虑过使用gdb库,但由于我使用python并且这些代码是用C语言编写的,因此在我的头上留下了一个关于兼容性的问号。

2 个答案:

答案 0 :(得分:1)

编写gdb脚本有两种主要方法。

一种方法是使用gdb MI("机器接口")协议。这是gdb具有的专用输入和输出模式,用于编程使用。它有一些疣但是足够可用" - 这是大多数gdb GUI使用的。

另一种方法是使用gdb的Python API编写在gdb中运行的Python脚本。这种方法通常更容易编程,但是在缺点方面,Python API缺少一些有用的部分,所以有时这不可能完成,具体取决于你正在尝试完成的事情。

答案 1 :(得分:0)

我找到了一个名为python-ptrace的库,它似乎现在正在工作(我在使用gdb时遇到了一些问题)。