内存调试工具Electric Fence简易说明

内存调试工具Electric Fence简易说明

1 efence简介

程序中的内存越界读写会带来严重的问题,虽然有时问题不会立刻表现出来,但会埋下严重的隐患,总会有一天程序会莫名的崩溃,而且这种问题调查起来会很吃力。Efence(Electric Fence)可以在debug阶段帮我们最大程度的发现这种问题,并精确定位问题的所在。

Efence有2个主要的功能:

(1) 内存越界读写时抛出segmentation fault。当程序用malloc申请内存时,Efence会使用虚拟内存技术将分配的内存空间之后的内存页面设置为inaccessible(不可读写和执行),所以当程序发生越界读写时,OS会发出SIGSEGV信号,生成core文件(core dump),进程退出。

(2) 当访问已经被释放的内存空间时抛出segmentation fault。当程序把一块空间free之后,Efence同样把这块内存的访问保护级别设置为inaccessible,所以当程序再次访问这块已经释放的内存时也会导致segmentation fault。

2.efence使用说明

(1) 下载源码,安装efence;

(2) 在Makefile文件中,链接处增加efence库,Libefence库位于/usr/lib64/目录下面;

(3) 编译运行,查看运行产生的core文件,如果没有core文件,说明测试通过。

注:

(1)efence库依赖于pthread(多线程)库

(2)可用strings检测efence是否加载成功:

Strings 进程 | grep EF_PROTECT

参考文献:http://blog.csdn.net/chessinge/article/details/6743764

时间: 2024-10-08 10:41:55

内存调试工具Electric Fence简易说明的相关文章

valgrind 内存调试工具

一.valgrind 是运行在linux系统下的内存调试工具,支持很多对象:memcheck.addrcheck.cachegrind.Massif.helgrind.Callgrind等.使用valgrind时,必须指明想用的对象,若是省略对象名,默认运行memcheck.(目前只用到memcheck) 二.memcheck 参数选项说明(常用的一部分): 1.--leak-check=no | summary | full   :对内存泄漏检查强度大小,不检查 | 简易检查 | 全部检查:默

Linux内存调试工具初探-MEMWATCH

C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权.这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级. 内存泄漏(即 malloc() 内存在对应的 free() 调用执行后永不被释放)和缓冲区溢出(例如对以前分配到某数组的内存进行写操作)是一些常见的问题,它们可能很难检测到.这一部分将讨论几个调试工具,它们极大地简化了检测和找出内存问题的过程 1. Memwatch简介Memwatch是C语言的内存检测器.除了检测内存的功能外,它

MIUI添加内存调试工具:查看进程中的Bitmap信息

Android开发中的内存管理一直是令人头痛的事情.其中占用内存最大的一般是Bitmap. 在上周五发布的MIUI开发版中,我添加了查看内存里Bitmap信息的功能.大家开发app的时候可以使用这个功能来查看分析app中的Bitmap情况. 使用方法:adb shell dumpsys gfxinfo [package name] [-b] [-e] adb shell dumpsys gfxinfo是Android原有的功能.我在此之上添加了一些参数来输出Bitmap信息. -b会输出进程中所

内存调试工具---valgrind

安装 1.到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2.解压安装包:tar –jxvf valgrind-3.2.3.tar.bz2 3.解压后生成目录valgrind-3.2.3 4. cd valgrind-3.2.3 5. ./configure 6. Make;make install 7.运行"valgrind ls- l"测试valgrind是否已经正确安装到计算机上 使用 1.编译带上debug:gcc -Wall test

usaco Electric Fence

这种有小数的题目总会令我格外头疼. /* ID: modengd1 PROG: fence9 LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> #include <math.h> using namespace std; long long ans,x1,x2; int n,m,p; int main() { freopen("fence9.in"

USACO 3.4 Electric Fence 皮克定理

题意:在方格纸上画出一个三角形,求三角形里面包含的格点的数目 因为其中一条边就是X轴,一开始想的是算出两条边对应的数学函数,然后枚举x坐标值求解.但其实不用那么麻烦. 皮克定理:给定顶点坐标均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积A和内部格点数目i.边上格点数目b的关系:A = i + b/2 - 1. 有了这条定理就好办了. 三角形面积直接用公式就能算出来. 对于从点(0,0)到点(x,y)的线段,该线段上的格点数目即gcd(x,y)+1 这样A和b都有了,套公式就行了.

Linux下调试程序方法

您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起.本文讨论了四种调试 Linux 程序的情况.在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们.在第 2 种情况中,我们使用了

嵌入式linux应用程序调试方法

嵌入式linux应用程序调试方法 四 内存工具 17 4.1 MEMWATCH 17 4.2 YAMD 22 4.3 Electric Fence 24 五 C/C++代码覆盖.性能profiling工具 24 5.1 用gcov来测试代码覆盖率 25 5.2 使用gprof来优化你的C/C++程序 35 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来跟踪稀奇古怪的内存错误问题.应用程序在有的开发工作站上能运行,但在新的产品工作站上,这个应用

掌握 Linux 调试技术

掌握 Linux 调试技术 在 Linux 上找出并解决程序错误的主要方法 Steve Best ([email protected])JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起. 本文讨论了四种调试 Linux 程序的情况.在第 1 种情况中,我们