`
Goldice
  • 浏览: 107619 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

valgrind概述及错误分析

阅读更多

       

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

 

 

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官网的技术资料,总结而成。)

0
2
分享到:
评论

相关推荐

    valgrind_manual

    #### 一、Valgrind 概述 Valgrind 是一套用于软件调试和性能分析的强大工具集合。它能够帮助开发者找出程序中的内存错误和资源泄漏问题,并且可以对程序进行性能评估,提高程序运行效率。Valgrind 最常用的工具之一...

    valgrind详细手册

    ### Valgrind 详细手册知识点概述 #### 一、Valgrind 概览 - **定义**:Valgrind 是一套强大的动态分析工具框架,专为软件开发者提供一系列的调试和性能分析工具。 - **特点**: - 模块化架构:允许轻松扩展新工具...

    valgrind manual

    ### Valgrind Manual知识点概述 #### 一、Valgrind简介 Valgrind是一款用于调试与性能分析的强大工具集,其主要目标是帮助开发者找出程序中的内存错误,并提高程序的性能。Valgrind的核心功能之一是Memcheck工具,...

    valgrind使用手册

    1. **介绍**:概述了 Valgrind 工具集的主要功能,特别是其中最流行的工具 Memcheck,它能够检测多种常见的内存错误,如越界访问、未初始化值的使用、不正确的内存释放和内存泄漏等。 2. **准备你的程序**:在使用 ...

    valgrind_manual.pdf

    Valgrind 作为一款强大的内存调试和性能分析工具,不仅能够帮助开发者高效地定位和修复内存错误,还能进行性能优化。其丰富的文档资料覆盖了从入门到进阶的所有方面,确保用户能够充分利用这一工具。无论是初学者...

    valgrind内存检测工具

    一、Valgrind的主要组件及功能: 1. Memcheck:这是Valgrind的核心组件,用于检测内存错误,如未初始化的内存读取、无效的内存访问(包括读写已释放的内存)以及内存泄漏。 2. Callgrind:这是一个性能分析工具,...

    learning-gdb-valgrind

    - 错误概述:包含错误类型、地址、线程ID等信息。 - 错误发生位置:展示引起错误的代码行或函数调用。 - 堆栈跟踪:显示错误发生时的完整调用堆栈。 通过熟练掌握GDB和Valgrind,开发者可以更有效地定位和修复...

    linux内存检测、线程调试工具valgrint 使用手册

    - **错误描述**:详细解释了错误发生的具体情况及可能的原因。 - **建议**:提供了一些建议措施来修复发现的问题。 #### 多线程调试 Valgrind还支持多线程程序的调试,这对于检测线程间的竞争条件、死锁等问题非常...

    软件工程与软件错误处理.pptx

    - **Valgrind**:用于检测C/C++程序中的内存泄漏和使用错误。 - **Purify**:IBM提供的内存泄漏检测工具。 - **Dr. Memory**:一款开源的内存错误检测工具。 **总结** 软件工程中的错误处理和排查技术对于确保软件...

    动态二进制分析与插桩原理介绍(PDF)

    符号执行允许程序以符号形式而非具体值运行,这样就可以探索多种执行路径,找出可能导致错误或安全漏洞的条件。 “动态二进制分析与插桩.pdf”很可能是本次讨论的主要资料,它详细阐述了二进制插桩的原理和实施方法...

    基于动态方法之嵌入软件缺陷检验技术概述与实现.docx

    Valgrind则是一个内存调试、性能分析和工具集合,特别适合于发现内存泄漏和非法内存访问等问题。 【实现过程】通常包括以下步骤: 1. **代码分析**:识别可能存在的缺陷模式,如C语言中常见的安全问题。 2. **插桩*...

    祁天-1183200123-lab6实验报告1

    valgrind是一个动态分析工具,用于检测内存泄漏、未初始化的内存访问等问题,对于优化内存使用和查找程序错误非常有帮助。 【CACHE模拟与测试】 在这一章节,学生设计和实现了一个CACHE模拟器,可能涉及到Cache的...

    c++程序调试使用手册

    本书作为程序调试的经典著作,不仅全面介绍了调试的基础知识和技巧,还深入探讨了C++编程中常见的错误类型及解决方案。通过学习本书,读者不仅能掌握实用的调试技能,还能培养出系统性地思考和解决问题的能力,这...

    插桩工具详细介绍

    - **Valgrind**:一个开源的动态分析工具集,主要用于内存错误检测和性能分析,适用于Linux和FreeBSD系统。 - **Dyninst**:一套高性能的动态插桩库,支持Linux和Mac OS X操作系统,能够处理复杂的程序结构。 - **...

    unix环境高级编程第三版

    高级编程还包括性能分析工具的使用,如gprof用于函数调用分析,strace跟踪系统调用,以及valgrind检测内存错误。通过这些工具,开发者可以找出并优化程序的瓶颈。 通过阅读《Unix环境高级编程》第三版,读者不仅...

Global site tag (gtag.js) - Google Analytics