我试图写的测试与GDB交互,但是我有麻烦捕获它的输出。我想对于要生成一个日志文件,它看起来像什么会在终端被视为有测试是手工执行。 GDB被证明是非常顽固当谈到然而捕获其输出。

我已经能够编写脚本,期待其能与GDB,其输出可以被重定向到一个日志文件,但我不想写我在TCL的测试进行交互。我希望能使用Groovy,这是与Java兼容。出于某种原因,Perl的Expect和ExpectJ节目输出总是前进到终端,并且不能被重定向到一个文件中。

我尝试使用的ProcessBuilder开始从Java GDB的过程,它大部分的作品,但打印报表的输出永远不会出现在标准输出,并且不能被捕获。我想,如果期望的作品,那么我发动从Java期待与广发行有交互,但是在这种情况下,程序输出的大部分丢失,永远不会出现在创建过程的标准输出。

所以我的问题是,我怎么能写在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
有帮助吗?

解决方案

一种可能性是,所述GDB输出被倾倒在标准错误和你只捕获标准输出。您应该能够通过重定向解决这个问题,这样的事情,我认为:

 process = "gdb -q 2&>1".execute()

第二个猜测是,它可能需要检查什么“Show互动模式”在工作和非工作情况下说。如果他们尝试不同的“设置互动模式关闭”你做任何事情之前。

一个第三选择是使用GDB的日志记录设备在写日志文件(“组记录文件”和“组记录”),并避免不必自己捕获输出。

其他提示

如果您的测试包括使用gdb进行调试实际的东西,而不是测试GDB本身,你应该考虑使用GDB / MI接口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top