【问题标题】:How to redirect Valgrind's output to a file?如何将 Valgrind 的输出重定向到文件?
【发布时间】:2012-01-11 11:05:01
【问题描述】:

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

 valgrind a.out | test

 valgrind a.out > test

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

我该怎么做?

【问题讨论】:

  • 您尝试过重定向 stout 和 stderr 吗? valgrind a.out &> file

标签: redirect valgrind


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢:)。有效。你能告诉我那个“2>&1”是怎么回事吗?
  • @Dinesh:我建议阅读gnu.org/software/bash/manual/bashref.html#Redirections,它描述了用于重定向的奇怪 Bash 语法!
  • 注意:这个建议也会将a.out的输出发送到同一个日志文件。如果您想将 valgrind 的输出保存到 没有 a.out 的日志文件,您应该使用 Lex 建议的 --log-file 选项。
  • 这也是调试内存泄漏的绝佳答案!
  • 如果你想通过管道输出到另一个命令:valgrind ./struct -v --leak-check=full 2>&1 | nc -N paste.ubuntu.ir 1337
【解决方案2】:
valgrind --log-file="filename"

【讨论】:

  • 这只是保存标准错误,是否可以将标准错误和标准输出以与终端中写入相同的顺序保存到同一个文件中(即保持测试程序的输出与 valgrind 报告的错误之间的一致性) ?
【解决方案3】:

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

valgrind --log-fd=1 ls | less

【讨论】:

    【解决方案4】:

    除了其他答案(特别是Lekakis)之外,还可以在--log-file= 选项中使用一些字符串替换,如Valgrind's user manual 中所述。

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

    • %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>

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2017-04-04
      • 2011-11-01
      相关资源
      最近更新 更多