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

时间:2015-05-26 09:26:58

标签: bash valgrind

问题背景:

我运行这样的命令:

$ 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能够使用valgrind --log-file="filename"将其输出直接流式传输到日志文件。

可能的解决方案:

我想出了像这样的解决方案

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

有更简单的方法吗?

3 个答案:

答案 0 :(得分:4)

要分隔valgrind和应用程序输出,您可以将valgrind输出重定向到另一个文件描述符: valgrind --log-fd=9 9>>test.log ./app

答案 1 :(得分:4)

这可能有点晚了,但是我在ubuntu上运行valgrind 3.10.1,你可以简单地使用--log-file=<filename>标志。 I.E.运行:

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

答案 2 :(得分:0)

正如我所理解的,这是我发现对我有用的答案:

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

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

“-q”选项也将 valgrind 限制为仅出错。