简介
-
Valgrind工具套件提供了大量的调试和分析工具,帮助您使程序更快、更正确。这些工具中最流行的是Memcheck。它可以检测在C和c++程序中常见的许多与内存相关的错误,这些错误可能导致崩溃和不可预知的行为。
程序准备
- 使用-g编译程序以包含调试信息,以便Memcheck的错误消息包含准确的行号。如果您能够容忍速度的下降,使用-O0也是一个好主意。在错误消息中使用-O1行号可能是不准确的,尽管一般来说,在-O1编译的代码上运行Memcheck工作得相当好,而且与运行-O0相比,速度上的改进相当显著。不建议使用-O2或以上,因为Memcheck偶尔会报告不存在的未初始化值错误。
使用方法
- valgrind --leak-check=yes myprog arg1 arg2
- Memcheck是默认的工具——泄漏检查选项, 打开详细的内存泄漏检测器。程序将运行得更慢。是正常的20到30倍,并使用更多的内存。Memcheck将发出关于它检测到的内存错误和泄漏的消息。
例子
下面的程序段使用Valring检测查看结果
#include <stdlib.h> void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; // problem 1: heap block overrun } // problem 2: memory leak -- x not freed int main(void) { f(); return 0; }