如何从 Catch 记者中排除 printf 消息

How to exclude printf messages from Catch reporter

我正在测试一个监控 U 盘并允许监听 plugin/plugout 事件的库。目标系统运行自定义 Linux 版本,调试在这个系统上很痛苦

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

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

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

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

谢谢。

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

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

另外,与你的问题无关,但可能对你的问题有帮助,你可以在平台上使用gdbserver调试。只需搜索 "gdbserver remote debugging" 以获取有关如何执行此操作的说明。

编辑添加: 如果您担心文件在崩溃时会被截断,只需将 "printf" 替换为也执行 fflush 的包装器即可。

还有另一种方法。

您可以使用 fprintf 将调试消息打印到 stderr 而不是 stdout

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

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

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

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

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

的标准错误。