我正在尝试编写与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