如何重定向Valgrind程序运行的输出?

5

问题背景:

我运行了以下类似的命令:

$ valgrind ./my_program < 1.in

我能够获取Valgrind的泄漏和错误信息,以及my_program的标准输出stdout和标准错误stderr流。

问题:

我想要重定向/静音my_program的所有流(包括stdout和stderr)。

到目前为止我学到了以下知识:

  • 运行> /dev/null不能静音my_program的stderr流。

  • 运行> /dev/null 2> /dev/null会一起静音my_program的所有输出流和Valgrind的消息。

  • 根据这个线程:How to redirect Valgrind's output to a file?,可以使用valgrind --log-file="filename"直接将Valgrind的输出流式传输到日志文件中。

可能的解决方案:

我想出了以下解决方案:

$ valgrind --log-file="filename" ./my_program < 1.in && cat filename

有没有更简单的方法来完成这个任务?
3个回答

10

为了区分valgrind和应用程序的输出,您可以将valgrind输出重定向到另一个文件描述符:

valgrind --log-fd=9 9>>test.log ./app

你能解释一下你的命令是做什么的吗?我以为我可以在Bash参考手册中找到关于--log-fd的内容,但是没有。 - Mateusz Piotrowski
2
@MateuszPiotrowski --log-fd 是一个 valgrind 选项。它告诉 valgrind 将 valgrind 的输出记录到指定的文件描述符中。我想其余部分应该很清楚了。 - doqtor
多亏了你的帮助,我已经成功编写出了我想要的代码:valgrind --log-fd=9 ./app < test.in 1>/dev/null。这个解决方案可以打印Valgrind的信息并隐藏应用程序的输出。 - Mateusz Piotrowski

6

这可能有点晚了,但是我正在Ubuntu上运行Valgrind 3.10.1,您可以简单地使用--log-file=<filename>标志。例如,运行:

valgrind [args] --log-file=<filename> ./my_program

0

根据我的理解,这是我发现适用于我的答案:

valgrind --log-fd=9 [program]  9>&1 1>/dev/null 2>/dev/null

这将输出valgrind消息到stdout,但程序的stdout和stderr将被重定向到/dev/null。重定向的顺序很重要,如此处所述。

"-q"选项也将限制valgrind仅报告错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接