初写C/C++程序,比较头疼的应该就是内存问题,本篇介绍一个帮助程序员调试定位常见内存问题;当然这个任务可以通过GDB完成(参见:GDB使用详解)
开始本篇前,请先确认调试程序采用Debug模式编译(编译时开启-g选项);
1、安装
下载地址:http://valgrind.org/downloads/
切换到Valgrind目录,并执行下面的命令:
./configure
make
make check
make install
2、调试
假设你的程序执行命令是:myprog arg1 arg2
使用Valgrind调试时执行:valgrind --leak-check=yes myprog arg1 arg2
3、举例:
假设你的程序有如下片段:
执行后会收到如下信息:
1、“==19182==”表示进程ID
2、“Invalid write of size 4”显示错误类型,这里是由于写内存堆块溢出
3、第二行开始显示发生问题的位置,如:“example.c:6”表示example.c的第6行代码,掌握跟踪顺序对调试很有帮助,通常顶部是最内层,底部是最外层
上诉例子中还存在内层泄露的问题,你会看到如下的信息:
1、“40 bytes in 1 blocks are definitely lost in loss record 1 of 1” 展示了Valgrind的分析包括,“definitely lost”-绝对损失,“probably lost”-可能损失