【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2014-04-15
        相关资源
        最近更新 更多