GDBと相互作用するテストを作成しようとしていますが、出力のキャプチャに問題があります。手作業でテストを実行した場合に端末で見られたようなログファイルを生成したいと思います。ただし、GDBは、出力のキャプチャに関しては非常に頑固であることが証明されています。
GDBと対話でき、出力をログファイルにリダイレクトできるExpectスクリプトを作成できましたが、TCLでテストを作成したくありません。Javaと互換性のあるGroovyを使いたいと思っています。何らかの理由で、PerlのExpectおよびExpectJでは、プログラム出力は常にターミナルに送られ、ファイルにリダイレクトできません。
ProcessBuilderを使用してJavaからGDBプロセスを開始しようとしましたが、ほとんど機能しますが、printステートメントの出力がstdoutに表示されず、キャプチャできません。Expectが機能する場合は、Javaからexpectを起動して、GDBと対話させると思いましたが、この場合、プログラム出力のほとんどが失われ、作成されたプロセスのstdoutに表示されません。
だから私の質問は、GDBと相互作用してすべての出力をキャプチャできるGroovy(Javaも問題ありません)でテストを作成するにはどうすればよいですか?
擬似コード:
process = "gdb -q".execute()
waitForPrompt()
send("file exec")
waitForPrompt()
send("run")
send("quit")
ログファイル:
(gdb) file exec
Reading symbols from exec...done.
(gdb) run
Starting program: exec
<... output ...>
Program exited normally.
(gdb) quit