1.编译时加 -g 选项
2.执行valgrind 加参数
valgrind --tool=memcheck --leak-check=full --show-reachable=yes --trace-children=yes ./app
其中–leak-check=full 指的是完全检查内存泄漏,
–show-reachable=yes是显示内存泄漏的地点,
–trace-children=yes是跟入子进程。
./app 生成的带调试信息的可执行程序
==23730== HEAP SUMMARY:
==23730== in use at exit: 8,024 bytes in 17 blocks
==23730== total heap usage: 297 allocs, 280 frees, 564,786 bytes allocated
==23730==
==23730== 472 bytes in 1 blocks are still reachable in loss record 1 of 4
==23730== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==23730== by 0x48FF92D: __fopen_internal (iofopen.c:65)
==23730== by 0x48FF92D: fopen@@GLIBC_2.2.5 (iofopen.c:86) //fopen后未调用fclose
==23730== by 0x11058C: mipilog_init (main.c:201) //main.c中201行申请资源未释放
==23730== by 0x111B19: main (main.c:603)
==23730==
==23730== 472 bytes in 1 blocks are still reachable in loss record 2 of 4
==23730== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==23730== by 0x48FF92D: __fopen_internal (iofopen.c:65)
==23730== by 0x48FF92D: fopen@@GLIBC_2.2.5 (iofopen.c:86)
==23730== by 0x110741: mipilog_init (main.c:224)
==23730== by 0x111B19: main (main.c:603)
==23730==
==23730== 1,416 bytes in 3 blocks are still reachable in loss record 3 of 4
==23730== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==23730== by 0x48FF92D: __fopen_internal (iofopen.c:65)
==23730== by 0x48FF92D: fopen@@GLIBC_2.2.5 (iofopen.c:86)
==23730== by 0x1103D7: mipilog_init (main.c:178)
==23730== by 0x111B19: main (main.c:603)
==23730==
==23730== 5,664 bytes in 12 blocks are still reachable in loss record 4 of 4
==23730== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==23730== by 0x48FF92D: __fopen_internal (iofopen.c:65)
==23730== by 0x48FF92D: fopen@@GLIBC_2.2.5 (iofopen.c:86)
==23730== by 0x110222: mipilog_init (main.c:155)
==23730== by 0x111B19: main (main.c:603)