如何将Valgrind的输出重定向到文件?

时间:2011-12-02 11:56:03

标签: redirect valgrind

在使用Valgrind工具时,我需要记录valgrind工具生成的详细信息。我怎么能做到这一点?我尝试了类似的东西,

 valgrind a.out | test

 valgrind a.out > test

它只给出了程序的输出而不是valgrind内存错误,泄漏信息。如果程序不需要用户交互(即提供输入),即使我是这样的。如果程序需要用户输入,即使该东西本身也不起作用。

我该怎么做?

4 个答案:

答案 0 :(得分:387)

valgrind --log-file="filename"

答案 1 :(得分:75)

默认情况下,Valgrind将其输出写入stderr。所以你需要做一些事情:

valgrind a.out > log.txt 2>&1

或者,你可以告诉Valgrind写别的地方;见http://valgrind.org/docs/manual/manual-core.html#manual-core.comment(但我从未尝试过这个)。

答案 2 :(得分:8)

如果您只想用较少的日志读取日志,也可以设置选项--log-fd。 例如:

valgrind --log-fd=1 ls | less

答案 3 :(得分:0)

除了其他答案(特别是Lekakis之外),Valgrind's user manual所详细说明的选项--log-file=中也可以使用某些字符串替换。

在撰写本文时,有四个替代品可供选择:

  • %p:打印当前进程ID
    • valgrind --log-file="myFile-%p.dat" <application-name>
  • %n:打印当前进程唯一的文件序列号
    • valgrind --log-file="myFile-%p-%n.dat" <application-name>
  • %q{ENV}:打印环境变量ENV的内容
    • valgrind --log-file="myFile-%q{HOME}.dat" <application-name>
  • %%:打印%
    • valgrind --log-file="myFile-%%.dat" <application-name>