您的位置:首页 > 运维架构 > Linux

linux使用valgrind 工具检查内存泄露

2008-08-04 16:58 676 查看

转载网址:http://hi.baidu.com/original/blog/item/bc5308f7651dcf22720eeca5.html

使用valgrind来管理cpp程序的内存

Valgrind是一款非常强大的工具集合,它包含有包括内存检测、CPU监测等多种工具,其中最常用的是内存检测功能,它能监测出以下的各种内存错误:
1. 访问非法内存区域
2. 使用未被初始化的内存区域
3. 非法释放内存,比如多次free一个内存
4. 内存泄露

使用步骤:
1. 使用valgrind前需要使用-g参数编译源程序以便生成debug信息
2. 在运行程序的命令行前加上valgrind,例如:valgrind myprog argvlist
为了能够给出内存检测报告,需要加上--leak-check参数,那么上述命令就变成:valgrind --leak-check=yes myprog argvlist
这个时候程序运行会非常慢,消耗资源也会大幅增加,这是正常的,不必担心。因为valgrind需要收集内存错误和泄露的详细信息。这被有些人认为是valgrind的缺点,但是对于一个大项目来说,这一点时间的消耗来监测程序的稳定性是值得的。
3. 阅读valgrind给出的报告
valgrind的其它参数:
--num-callers=N:指定报告中调用栈的层数,这在定位和跟踪错误的时候会比较有用
-v :可以打印出更加详细的信息
valgrind的报告:
"Invalid write/read...":这一般是访问非法的内存区域,比如数组越界等
"Conditional jump or move depends on uninitialised value(s)":使用了未初始化的变量(包括未初始化的局部变量和未初始化的堆区域)
"Mismatched free() / delete / delete []":这一般是非法释法内存的错误,比如多次free一个内存
"LEAK SUMMARY":这表示下面是内存泄露的信息(造成内存丢失的程序行可以通过查看这一行前面的清单来定位)
"definitely lost":肯定丢失的部分,这种报告必须处理
"possibly lost":可能丢失的部分,这是由于C/C++语言指针处理的特点造成的,这部分可能不太准确

这里只有一个简单的介绍,更多详细信息参见valgrind的官方网站:http://valgrind.org/docs/manual/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: