如何编写一个通过gdb调试子进程的自动化工具



我在python中有一个脚本,它产生了一个新的进程,我想在gdb中调试它。一般来说,我会执行通常的流程来调试这个子流程。在这个进程中放入sleep,直到某个条件为true,然后在另一个会话中通过这个进程的pid附加gdb,放入一些断点,使该条件为true以便在sleep后继续。

我想以一种自动化的方式来做这件事,比如说python脚本本身产生了一个新的gdb进程,并给我一个gdb提示?我对诅咒略知一二,所以也许我可以用它做点什么。但主要的问题是如何在python中生成一个交互式进程(这里是gdb),以及如何向用户提供gdb提示,我不太清楚。感谢您的帮助。

如果您从终端以交互方式运行python进程,只需正常运行"gdb"(例如使用os.system())作为python进程的子进程。它将继承终端并接管stdio,就像从shell运行一样。(如果你不是以交互方式运行它,你需要解释你所说的"给我一个gdb提示"到底是什么意思)。

此外,如果您知道将来要调试该进程,那么最好首先在gdb下生成该进程,而不是将其停在正确的位置并附加它。

Expect或pexpect python库在这种情况下可以用来实现这一点。

下面的简单用法示例:

import pexpect
child = pexpect.spawn("mc")
child.interact() # will return when mc finish

最新更新