如何从 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.
的标准错误。
我正在测试一个监控 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.