我正在尝试开发一个使用gdb进行基本调试的程序。它从命令行执行gdb,附加到目标进程并提供一些特定命令,然后读取std输出。一开始看起来一切都很好,所以我开始使用python和pexpect。但最近,在考虑未来的实施时,我遇到了一个问题。由于我一次只能从命令行执行一个命令(每个进程只能有一个gdb实例),因此不断请求数据刷新某些UI元素的线程最终会导致混乱。想一想:
1-)GDB停止程序执行命令
2-)在执行代码时阻止其他线程
3-)GDB在执行完成后继续执行程序
4-)其中一个等待线程将立即尝试使用GDB
5-)转到1并重复
我们正在处理的过程将每0.5秒冻结一次,这将是无法忍受的。
因此,我想要实现的是在执行命令时进行多线程处理。我该怎么做?我考虑过使用gdb库,但由于我使用python并且这些代码是用C语言编写的,因此在我的头上留下了一个关于兼容性的问号。
答案 0 :(得分:1)
编写gdb脚本有两种主要方法。
一种方法是使用gdb MI("机器接口")协议。这是gdb具有的专用输入和输出模式,用于编程使用。它有一些疣但是足够可用" - 这是大多数gdb GUI使用的。
另一种方法是使用gdb的Python API编写在gdb中运行的Python脚本。这种方法通常更容易编程,但是在缺点方面,Python API缺少一些有用的部分,所以有时这不可能完成,具体取决于你正在尝试完成的事情。
答案 1 :(得分:0)
我找到了一个名为python-ptrace的库,它似乎现在正在工作(我在使用gdb时遇到了一些问题)。