我正在嘗試編寫與GDB交互的測試,但在捕獲輸出時遇到了問題。我想要生成一個日誌文件,看起來像在終端上看到的那樣,手動執行了測試。然而,GDB在捕捉其輸出時被證明是非常固執的。編寫使用GDB的測試 - 如何捕獲輸出?
我已經能夠編寫能夠與GDB交互並且其輸出可以重定向到日誌文件的Expect腳本,但我不想在TCL中編寫我的測試。我希望使用與Java兼容的Groovy。出於某種原因,使用Perl的Expect和ExpectJ,程序輸出總是進入終端,不能被重定向到文件。
我試着從Java使用ProcessBuilder開始一個GDB進程,它主要工作,但打印語句的輸出永遠不會出現在標準輸出上,並且不能被捕獲。我認爲如果Expect能夠正常工作,那麼我希望能從Java中獲得期望,並讓它與GDB交互,但在這種情況下,大部分程序輸出都會丟失,從不出現在創建過程的標準輸出中。
所以我的問題是,如何在Groovy中編寫一個測試(Java會很好),它與GDB交互並可以捕獲所有輸出?
僞代碼:
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
我沒有在這裏列出,因爲我想保持簡短,但我已經將stderr與標準輸出合併 - 它不在那兒。我現在意識到,雖然輸出只是沒有被GDB衝昏了頭腦!出現另一個命令和輸出。 日誌記錄選項可用,但不包括髮送到GDB的命令。你可以使用「set trace-commands on」來獲取它們。不完全相同,因爲每個打印都以「+」爲前綴,但足夠接近。 謝謝! – dromodel 2010-02-23 20:57:42