【问题标题】:GDB/MI detecting target waiting for inputGDB/MI 检测目标等待输入
【发布时间】:2012-09-26 21:24:37
【问题描述】:

我正在为我的 Java 项目编写 GDB 包装器。有没有办法确定 GDB 中的目标应用程序何时等待用户输入?

【问题讨论】:

  • 也许我很密集,但由于这是针对您的 Java 项目,是否应该将其标记为 that 而不是 C?
  • Dennis Meng,我添加了 java 标签。

标签: java c gdb


【解决方案1】:

基本上,您需要将标准 I/O 重定向到 POSIX 系统下的伪终端。我将在下面概述如何做到这一点。

编写一个单独的独立“启动器”程序:

在您的 Java 控制程序中:

  1. Open one pair of pseudo terminals(另请参见上面链接的 pty_fork.c 示例)
  2. 启动启动程序。将其进程 ID 保存在 LAUNCHER_PID 中。启动器最终会阻塞在 recvmsg() 中,等待接收新的文件描述符。
  3. 在 GDB 中执行 "set follow-fork-mode child"
  4. 将 GDB 直接附加到 LAUNDHER_PID
  5. Send the slave end of the pty to the launcher program。然后启动器将从 recvmsg() 返回并继续执行 fock()、dup2()、execl() 序列。

然后您可以检测到正在调试的程序正在等待用户输入,例如将pty文件描述符的master端转换为NIO Channel,设置为非阻塞模式和monitor the master pty for writing with a Selector

您需要单独的代码路径来支持 Microsoft Windows。

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 2017-08-08
    • 2021-02-16
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多