【问题标题】:How to write a automated tool for debugging a child process through gdb如何编写一个通过gdb调试子进程的自动化工具
【发布时间】:2012-08-27 20:13:24
【问题描述】:
我在 python 中有一个脚本,它产生了一个我想在 gdb 中调试的新进程。通常我会做通常的过程来调试这个子进程。将睡眠置于此进程中,直到某些条件为真,然后通过此进程的 pid 在另一个会话中附加 gdb,放置一些断点并使条件为真,以便它在睡眠后继续。
我想以自动方式执行此操作,例如 python 脚本本身会产生一个新的 gdb 进程并给我一个 gdb 提示符?我对诅咒有点了解,所以我可以用它做点什么。但主要问题是如何在 python 中生成交互式进程(此处为 gdb)以及如何向用户提供 gdb 提示,我不太清楚。任何帮助表示赞赏。
【问题讨论】:
标签:
python
c
debugging
gdb
interactive
【解决方案1】:
如果您从终端以交互方式运行 python 进程,只需正常运行“gdb”(例如使用os.system())作为 python 进程的子进程。它将继承终端并接管 stdio,就像它从 shell 运行一样。 (如果您不是以交互方式运行它,则需要解释“给我一个 gdb 提示符”到底是什么意思)。
另外,如果您知道将来要调试该进程,那么最好首先在 gdb 下生成该进程,而不是让它停在正确的位置并附加它。
【解决方案2】:
在这种情况下可以使用Expect或pexpect python库来做到这一点。
下面的简单pexpect用法示例:
import pexpect
child = pexpect.spawn("mc")
child.interact() # will return when mc finish