Valgrind

很早以前就听过 Valgrind,在看各种库的测试代码的时候总能看到这个词,但一直没有机会使用到。今天在为 Peppa PEG 写增强测试用例的时候,感受到了它的便捷。

Valgrind 可以检测内存使用异常,最常见的就是内存泄漏啦(malloc 没有对应的 free)。

它的使用非常简单,编出可执行文件后,

valgrind ./program

在整合进 Peppa PEG 的测试用例时,我使用了如下这些选项:

valgrind --trace-children=yes --leak-check=full —-error-exitcode=1 -s ./test_xxx

这套选项可以在所有测试用例功能测试 pass 的情况下,额外检查是否有内存泄漏,果不其然,是有两三个小地方的( 104f356 3e751ebf )。它甚至查到了一个变量未初始化 e75024b

CMake ctest 在混合使用 valgrind 的时候,真是程序美话不多,没事儿啥也不报,测试结果报告干干净净,有错的时候各种信息弹出来帮助分析定位内存异常。

它的错误报告非常贴心,在 gcc -g 开启的情况下,valgrind 的错误报告也包含了足够多的信息用于帮助修复。具体不多说,我看的是这篇小短文:https://epitech-2022-technical-documentation.readthedocs.io/en/latest/valgrind.html

嗯嗯,还在学习中,看到 json-c 还使用 valgrind 做 benchmark。给 Peppa PEG 做完 benchmark 后再发开箱体验第二弹。