如何从Catch记者

时间:2017-09-29 13:53:03

标签: c++ linux cross-platform catch-unit-test

我正在测试一个监视USB记忆棒的库,并允许监听插件/插件事件。目标系统运行自定义Linux版本,调试对此系统来说很痛苦

因此,为了快速分析发生的事情,我经常使用printf消息。

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

问题:如果我插入printf条消息进行分析,则会将其添加到xml生成的Catch报告中。

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

感谢。

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

3 个答案:

答案 0 :(得分:1)

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

另外,与您的问题完全无关,但可以帮助您解决问题,您可以使用gdbserver在平台上进行调试。只需搜索" gdbserver远程调试"有关如何操作的说明。

编辑添加: 如果您担心在发生崩溃时文件会被截断,只需替换" printf"使用包装也可以fflush。

答案 1 :(得分:1)

还有另一种方式。

您可以使用stderr将调试消息打印到stdout而不是fprintf,如下所示:

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

由于Catch的报告已写入stdout,您可以使用重定向关闭输出,例如在Linux系统上:

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

答案 2 :(得分:0)

如果你可以将输出写入文件,那么有一个简单的解决方案。使用-o option更改Catch放置输出的位置。

您可以将其用作-o report.xml将输出放在名为report.xml的文件中,也可以使用名为%debug的特殊文件。当传递%debug作为输出文件时,Catch尝试写入它知道的给定平台的任何调试工具,这是Android的stderr。