2012-09-26 55 views
0

我正在为我的Java项目编写GDB包装。有没有一种方法可以确定GDB中的目标应用程序何时等待用户输入?GDB/MI检测目标等待输入

+0

也许我是密集的,但因为这是你的Java项目,应该把它标记为那个而不是C? –

+0

Dennis Meng,我已经添加了java标记。 – Eloar

回答

1

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

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

在Java控制程序:

  1. Open one pair of pseudo terminals(见链接到上面的例子pty_fork.c)
  2. 启动的启动程序。将其进程ID保存在LAUNCHER_PID中。启动程序最终会阻塞在recvmsg()中,等待接收新的文件描述符。
  3. 执行“设置跟踪叉型的孩子”在GDB
  4. 直接GDB附加到LAUNDHER_PID
  5. Send the slave end of the pty to the launcher program。然后启动程序会从recvmsg()返回并继续执行fock(),dup2(),execl()序列。

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

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