
首先,下面将介绍几种内存泄漏检查工具

Valgrind的详细说明

Valgrind包括以下工具:
1.Memcheck: 这是valgrind使用最广泛的工具,它是一种重量级的内存检查器,可以检测开发中的大多数内存错误,例如: 使用未初始化的
2.callgrind: 主要用于检查程序中调用函数过程中的问题
3.cachegrind: 主要用于检查程序中缓存使用的问题

4.Helgrind: 主要用于检查多线程中的竞争问题
5.Massif: 它主要用于检查程序中堆栈使用中的问题
6.Extension: 您可以使用内核提供的功能来编写自己的特定内存调试工具
Linux程序的内存空间布局

内存检查原理
Memcheck检测内存问题的:


1. 有效值表:
对于进程的整个地址空间中的每个字节(字节),有8位对应于它c 内存检测工具,对于CPU的每个寄存器,也有对应于它的位向量. 这些位负责记录字节或寄存器值是否具有有效的初始化值
2. 有效地址表
对于进程的整个地址空间中的每个字节,还有一个对应的1bit,用于记录该地址是否可以读取或写入.
检测原理
当您要在存储器中读取或写入一个字节时,请首先检查与该字节对应的A位. 如果A位表明该位置无效,则memcheck报告读取和写入错误.
内核类似于虚拟CPU环境,因此,当将内存中的一个字节加载到实际CPU中时,与该字节对应的V位也将加载到虚拟CPU环境中. 用于生成内存地址,或者该值会影响程序的输出,memcheck将检查相应的vbit. 如果该值尚未初始化,它将使用未初始化的内存报告错误.
接下来,我将主要介绍valgrind的安装和使用. 关于其他工具,您可以查看信息,谢谢您的配合!
Valgrind安装
1. 解压安装包

tar -jxvf valgrind-3.11.0.tar.bz2 -C / usr / local / src
2. 输入要安装的目录
cd /usr/local/src/valgrind-3.11.0
3. 运行./autogen.sh设置环境(需要标准的autoconf工具)
./ autogen.sh
4. 配置Valgrind并生成MakeFile文件
./ configure --prefix = / usr / local
5. 编译并安装valgrind
使&&使installvalgrind使用
第一步: 准备程序

为了使valgrind发现的错误更精确,例如能够找到源代码行,建议在编译时添加-g参数,并选择编译器优化选项来选择O0(不要优化)
第2步: 在valgrind下运行可执行程序
使用valgrind调试内存问题,无需重新编译源程序,并且其输入是二进制可执行程序. 调用Valgrind的一般格式为: valgrind [valgrind-options] your-prog [your-prog-options]
Valgrind的参数分为两类. 一个是核心参数,适用于所有工具. 另一个是特定工具(例如memcheck)的参数. Valgrind的默认工具是memcheck,其他工具也可以通过“ --tool = tool name”指定. Valgrind提供了大量参数来满足您特定的调试需求,有关详细信息,请参阅其用户手册.


使用Memcheck查找常见内存问题摘要
Memcheck将内存泄漏分为两种类型,一种是可能的内存泄漏(可能丢失)c 内存检测工具,另一种肯定是内存泄漏. 可能丢失意味着有一个指针可以访问内存块,但该指针指向内存的第一个地址. 绝对丢失意味着无法再访问内存. 绝对丢失分为两种: 直接(直接)和间接(间接). 直接和间接之间的区别在于,直接意味着没有指向内存的指针,而间接意味着指向内存的指针位于内存泄漏处. 在上面的示例中,根节点直接丢失,其他节点间接丢失
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-289296-1.html
以前最起码吃