GDB / MI检测目标等待输入

时间:2012-09-26 21:24:38

标签: java c gdb

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

1 个答案:

答案 0 :(得分:1)

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

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

在Java控制程序中:

  1. Open one pair of pseudo terminals(另见上面链接的pty_fork.c示例)
  2. 启动启动程序。将其进程ID保存在LAUNCHER_PID中。启动程序最终将在recvmsg()中阻塞,等待接收新的文件描述符。
  3. 在GDB
  4. 中执行“set follow-fork-mode child”
  5. 直接GDB附加到LAUNDHER_PID
  6. Send the slave end of the pty to the launcher program。然后启动程序将从recvmsg()返回并继续执行fock(),dup2(),execl()序列。
  7. 然后,您可以检测到正在调试的程序正在等待用户输入。将pty文件描述符的主端转换为NIO通道,将其设置为非阻塞模式并monitor the master pty for writing with a Selector

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