2012-09-26 49 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。