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

Python 如何编写通过gdb调试子进程的自动化工具,python,c,debugging,gdb,interactive,Python,C,Debugging,Gdb,Interactive,我有一个python脚本,它生成了一个新进程,我想在gdb中调试它。通常,我会执行常规流程来调试这个子流程。将睡眠置于该进程中,直到某个条件为真,然后在另一个会话中通过该进程的pid连接gdb,放置一些断点并使该条件为真,以便在睡眠后继续 我想以一种自动化的方式来做这件事,比如说python脚本本身产生了一个新的gdb进程并给我一个gdb提示?我对诅咒略知一二,也许我可以用它做点什么。但主要的问题是如何在python中生成交互式进程(这里是gdb)以及如何向用户提供gdb提示,我不太清楚。非常感

我有一个python脚本,它生成了一个新进程,我想在gdb中调试它。通常,我会执行常规流程来调试这个子流程。将睡眠置于该进程中,直到某个条件为真,然后在另一个会话中通过该进程的pid连接gdb,放置一些断点并使该条件为真,以便在睡眠后继续


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

如果您是从终端以交互方式运行python进程,只需将“gdb”作为python进程的子进程正常运行(例如,使用
os.system()
)。它将继承终端并接管stdio,就像从shell运行一样。(如果您不是以交互方式运行它,则需要解释“给我一个gdb提示”的确切含义)


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

在这种情况下,可以使用Expect或pexpect python库来完成这项工作

下面是简单的预期使用示例:

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