你好,我试图在几个输入文件上运行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用你自己的路径。