valgrind概述及错误分析_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > valgrind概述及错误分析

valgrind概述及错误分析

 2011/10/20 8:11:19  Goldice  http://jdoc.iteye.com  我要评论(0)
  • 摘要:Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具.而其他工具则类似于插件(plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind包括如下一些工具:1.Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。2
  • 标签:分析 错误

? ? ? ?

? ? ? Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具.而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。

?

system.jpg?version=1&modificationDate=1303225093000" alt="">

?

Valgrind包括如下一些工具:
1. Memcheck: 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。
2. Callgrind: 它主要用来检查程序中函数调用过程中出现的问题。
3. Cachegrind: 它主要用来检查程序中缓存使用出现的问题。
4. Helgrind: 它主要用来检查多线程程序中出现的竞争问题。
5. Massif: 它主要用来检查程序中堆栈使用中出现的问题。
6. Extension: 可以利用core提供的功能,自己编写特定的内存调试工具。

?

?

错误分析

类型1

valgrind结果:

分析:
1.函数中动态申请的堆内存没有释放
2.对堆内存的访问越界

?

类型2

valgrind结果:

分析:程序跳转依赖于一个未初始化的变量

?

?

类型3

valgrind结果:

分析:非法读,非法写,如访问数组时越界,对动态内存访问时超出了申请的内存大小范围

?

类型4

valgrind结果:

分析:使用strcpy, strncpy, memcpy, strcat等时源地址和目标地址设置出现重叠

?

类型5

valgrind结果:

分析:内存动态管理错误,包括申请和释放不一致,申请和释放不匹配,释放后仍然读写

?

类型6



valgrind结果:

分析:内存泄露. Memcheck将内存泄露分为两种,一种是可能的内存泄露(Possibly lost),另外一种是确定的内存泄露(Definitely lost)。Possibly lost 是指仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内存首地址。Definitely lost 是指已经不能够访问这块内存。而Definitely lost又分为两种:直接的(direct)和间接的(indirect)。直接和间接的区别就是,直接是没有任何指针指向该内存,间接是指指向该内存的 指针都位于内存泄露处。

?

(本文参考了IBM,valgrind官网的技术资料,总结而成。)

发表评论
用户名: 匿名