2011-12-02 1221 views
108

在使用Valgrind工具时,我需要记录由valgrind工具生成的详细信息。我怎么能做到这一点?我想是这样,如何将Valgrind的输出重定向到文件?

valgrind a.out | test 

valgrind a.out > test 

这给了刚刚程序的输出,而不是Valgrind的内存错误,泄露信息。即使我喜欢这个,如果该程序不需要用户交互(即提供输入)。如果该程序需要用户输入,即使该东西本身也无法工作。

我该怎么做?

+1

您是否试过重定向stout和stderr? 'valgrind a.out&>文件' – sidyll

回答

335
valgrind --log-file="filename" 
+0

这是完美! – Yash

+20

这应该是被接受的答案。 – SeMeKh

69

默认情况下,Valgrind将其输出写入stderr。因此,您需要执行以下操作:

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

或者,您可以告诉Valgrind在其他地方写入;见http://valgrind.org/docs/manual/manual-core.html#manual-core.comment(但我从来没有尝试过)。

+2

非常感谢:)。有效。你能告诉我什么是“2>&1”吗? – Dinesh

+7

@Dinesh:我建议阅读http://www.gnu.org/software/bash/manual/bashref.html#Redirections,它描述了做重定向的奇怪的Bash语法! –

+14

注意:这个建议还会将'a.out'的输出发送到同一个日志文件。如果要将valgrind的输出保存到日志文件*,而不使用*'a.out',则应使用Lex建议的'--log-file'选项。 – edam

6

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

valgrind --log-fd=1 ls | less 
+0

谢谢,这节省了我的硬盘! –