2017-09-29 38 views
0

我正在测试一个监视USB存储棒并允许监听插件/插件事件的库。目标系统运行一个定制的Linux版本,并调试该系统上的疼痛如何从Catch报告中排除printf消息

所以,这是怎么回事的快速分析,我经常使用printf消息。

对于库的单元测试,我已经开始使用Catch,并使用JUint记者生成测试报告。

问题:如果我插入用于分析printf消息时,它被添加到由Catch产生的xml报告。

我的问题:有没有办法将printf消息和Catch生成的报告分开?

谢谢。

更新:我想避免写入文件,因为当文件完全写入之前出现错误并且程序崩溃时,我遇到了问题。

+0

在进行单元测试时定义了一个宏,在定义时会禁用调试输出? –

+0

这是我的第一次Catch测试,我想确保一切按预期工作。所以,我想保持两个。 –

回答

1

还有另外一种方法。

你可以使用fprintf这样打印调试消息stderr,而不是stdout

fprintf(stderr, "%d\n", c); 

由于捕捞的报告写入stdout你就可以解雇你的输出重定向使用,例如在Linux系统上:

./a.out -r junit 2> /dev/null 
+0

我试了一下,但Catch也捕获std-err。调试消息被添加到名为“system-err”或“system-out”的XML中的特殊标记中。 –

+0

您确定这不是您配置的结果吗?我正在做这个确切的事情,它适用于我... –

+0

好吧,它现在工作。我没有尝试重定向,因为我不明白它是如何影响catch的输出文件的。这让我感到困惑。但你的解决方案已经奏效。谢谢! –

1

对Catch并不十分熟悉,但一个明显的解决方案是打印到非标准位置。因此,例如,fopen日志文件和fprintf而不是标准输出。

此外,与您的问题非常无关,但可能会帮助您解决您的问题,您可以使用gdbserver在平台上进行调试。只需搜索“gdbserver远程调试”以获取有关如何执行此操作的说明。

修改为添加: 如果您担心文件在发生崩溃时会被截断,只需将“printf”替换为fflush的包装即可。

+0

我重申了我的问题,以反映我正在寻找的东西。关于文件的使用,我想到了这种方法,如果事实证明没有其他简单的解决方案,我确实会这样做。 –

0

如果您没有问题,并将输出写入文件中,有一个简单的解决方案。使用-o option更改Catch放置其输出的位置。

您可以使用它作为-o report.xml有输出被放置在一个名为report.xml文件,或者你可以使用一个叫做%debug的特殊文件。当传递%debug作为输出文件时,Catch会尝试写入它所知道的针对给定平台的任何调试工具,这是Android的stderr。