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

3
我有一个Python脚本,它生成一个新的进程,我想在gdb中对其进行调试。通常情况下,我会像调试子进程一样操作。在此进程中放置sleep,直到某个条件为真,然后通过不同的会话使用该进程的pid附加gdb,设置一些断点,并使得条件变为真,以便在sleep后继续执行。
我想以自动化的方式完成这项工作,比如说Python脚本本身生成一个新的gdb进程并给我一个gdb提示?我知道一点关于curses的东西,所以也许我可以做一些调整。但主要问题是如何在Python中生成交互式进程(在这里是gdb),以及如何向用户提供gdb提示,我不太了解。非常感谢您的帮助。
2个回答

0

在这种情况下,可以使用Expect或Pexpect Python库来实现。

以下是一个简单的Pexpect使用示例:

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

0

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

此外,如果您知道将来要调试该进程,最好在第一次生成进程时就在gdb下启动它,而不是通过让它停在正确的位置并附加到它的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接