0

Java プロジェクトの GDB ラッパーを作成しています。GDB のターゲット アプリケーションがユーザー入力を待機しているタイミングを特定する方法はありますか?

4

1 に答える 1

1

基本的に、POSIXシステムでは標準I/Oを疑似端末にリダイレクトする必要があります。その方法を以下に概説します。

次のような独立したスタンドアロンの「ランチャー」プログラムを作成します。

Java制御プログラムの場合:

  1. 1組の疑似端末を開きます (上記にリンクされているpty_fork.cの例も参照してください)。
  2. ランチャープログラムを開始します。プロセスIDをLAUNCHER_PIDに保存します。ランチャーは最終的にrecvmsg()でブロックし、新しいファイル記述子の受信を待機します。
  3. GDBで「setfollow-fork- modechild 」を実行します
  4. LAUNDHER_PIDに接続するようにGDBに指示します
  5. ptyのスレーブエンドをランチャープログラムに送信します。次に、ランチャーはrecvmsg()から戻り、fock()、dup2()、execl()シーケンスに進みます。

次に、デバッグ中のプログラムがユーザー入力を待機していることを検出できます。たとえば、ptyファイル記述子のマスターエンドをNIOチャネルに変換し、非ブロッキングモードに設定して、セレクターで書き込みを行うマスターptyを監視します。

Microsoft Windowsをサポートするには、別のコードパスが必要です。

于 2012-09-30T20:08:24.637 に答える