如何在命令中将 valgrind 输出(堆摘要)与我的程序输出一起重定向?

How can I redirect valgrind output (Heap summary) alongside my program's output in a command?

你好,我正在尝试 运行 对几个输入文件进行 valgrind 以查明我的程序中是否存在任何内存泄漏,并希望将程序输出与 valgrind 的堆摘要一起放入单独的文件中,我'感谢您的帮助

我尝试了 运行以下几行:

for i in {0..99}

do

  valgrind --leak-check=full --leak-resolution=med --track-origins=yes --vgdb=no

  ./IndustrialTakeover<./tests/input/in${i}.txt>./tests/valgrind_check/program/output${i}.txt

done

但这不会将堆摘要输出提供到他们自己的文件中

然后我尝试了 运行ning :

for i in {0..99}

do
  valgrind --log-file=./tests/valgrind_check/valgrind_message/output${i}.txt

  --leak-check=full --leak-resolution=med --track-origins=yes --vgdb=no

  ./IndustrialTakeover<./tests/input/in${i}.txt>./tests/valgrind_check/program/output${i}.txt

done

但它也没有用,我收到了消息

valgrind: Use --help for more information.

--leak-check=full: command not found

valgrind: no program specified

,不胜感激!

此问题的解决方案是使用以下几行:

for i in {0..99} ;
do
  valgrind valgrind --log-file=./tests/valgrind_check/valgrindmessage/output${i}.txt --leak-check=full --leak-resolution=med --track-origins=no --vgdb=no./IndustrialTakeover<./tests/input/in${i}.txt>./tests/valgrind_check/program/output${i}.txt ;
done

当然,您必须将 for 循环中的范围替换为您自己的应用,将路径替换为您自己的路径。

一种更 Valgrind-y 的方法是将 pid 合并到日志文件名中,如下所示:

for i in {0..99} ;
do
  valgrind valgrind --log-file=./tests/valgrind_check/valgrindmessage/valgrind.%p.log --leak-check=full --leak-resolution=med --track-origins=no --vgdb=no ./IndustrialTakeover < ./tests/input/in${i}.txt > ./tests/valgrind_check/program/output${i}.txt ;
done

Valgrind 将用 pid 替换 %p。

如果您使用 --trace-children=yes,这将特别有用,因为它还会为每个生成的进程生成一个日志。