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



你好,我试图在几个输入文件上运行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

,但这不会将堆汇总输出提供到它们自己的文件

然后我试着运行:

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:使用——help获取更多信息。

——leak-check=full: command not found

valgrind: no program specified

,非常感谢您的帮助!

一种更加valgrind的方法是将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会将%p替换为pid。

这在使用--trace-children=yes时特别有用,因为它也会为每个生成的进程生成一个日志。

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

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循环中的range, app用你自己的app, paths用你自己的路径。

相关内容

  • 没有找到相关文章

最新更新