linux memwatch的内存检测-double-free

踩内存问题分析工具 踩内存问题,大家都知道,是一个比较难分析的问题。踩内存问题被发现,通常是程序崩溃的时候,能够生成coredump分析,知道是哪个内存被踩了,但通常是很难分析出是哪段代码出现了踩内存的问题。本文会介绍几种分析踩内存问题的工具,有些工具是最近发现的,我还没有大量使用过,所以只是个简单的介绍,各位看官自行判断是否实用。文章写的比较匆忙,内容可能会不太完整,请各位见谅。发现踩内存问题后,我们可以通过gdb来起出现问题的应用程序,然后对出现问题的变量进行watch,每次这个变量被读取/修改时,程序都会暂停,我们就可以 阅读详情
1 memwatch是什么?
  memwatch是C语言的内存检测器。除了检测内存的功能外,它同样可以做其它的一些事情,而我们主要还是在于讲述它的基本功能。如果你真的想要知道所有相关的具体细节,可详细查看头文件memwatch.h以及源代码。那里面有具体且详细的注释说明。
它使用C于处理器的功能,memwatch使用它自己定义的功能函数取代所有在你的程序中用ANSI C定义的内存分配函数,memwatch的内存分配函数包含了了所有的分配记录信息。
2 memwatch功能
 a.它主要有基本的内存管理函数
   mwMalloc()
   mwFree()
   mwCalloc()
   mwRealloc()
 b.MemWatch能够检测的功能包括
        双重释放(double-free)、
        错误释放(erroneous free)、
        内存泄漏(unfreed memory)、
        溢出(Overflow)、
        下溢(Underflow)等
        而目前我们只针对double-free进行了验证;
  对于unfreed功能,需要在主程序结束前添加CHECK()函数进行检查,这一点嵌入式系统并不特别适用,因此,在强行关闭程序时有可能会出现大量的unfreed信息,请忽略。
  使用MemWatch功能需要在待检测源文件中引用memwatch.h,若没有添加有可能出现野指针(wild-free)信息;如果申请内存时使用了malloc而释放内存时使用了mwfree接口,有可能会出现错误释放(wild-free)信息,遇到wild-free现象时请先排除以上两场景。

3 编译
    当编译时, 相让memwatch起作用, 编译是加上-DMEMWATCH
4 memwatch.log内容
    在正常操作的情况下,memwatch会创建一个名叫memwatch.log的文件。但有的时候,memwatch.log文件并不能被创建。此时,memwatch会尝试创建命名类似memwatNN.log的文件,其中NN是01到99之间的数字。如果还是失败,则没有log文件。
    a、检测启动时间:
    如:
    Started at Thu Nov  1 14:56:31 2012
    Started at Thu Nov  1 14:56:31 2012
    b、状态搜集器的信息及宏定义信息,可忽略。
    如:
    __STDC__ 64-bit mwDWORD==(unsigned long
    mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32

    c、MemWatch捕获的错误信息
    如:
    double-free: <1385> menuChannelSet.c(529), 0x11a4130 was freed from mwTest.c(781)
Linux 内存检测工具 memwatch的使用 Linux 内存检测工具 memwatch的使用 官网下载memwatch的源码 推荐使用地址http://www.linkdata.se/sourcecode/memwatch/ 打开文件,新建一个目录,将刚刚下载好的复制在里面 linux环境下压缩包解压 使用命令:tar -xzvf memwatch-2.71.tar.gz 为自己的程序提供MemWatch功能 第一种:你可以将memwatch自带的test.c的代码替换为自己的代码,然后使用make,然后查看memwatch.log文件。 第 阅读详情

相关推荐

记一次《C语言踩内存》问题定位有感

踩内存问题,个人认为算是比较容易出现但是有很难定位的问题,被踩者轻者功能瘫痪,重者一命呜呼,直接诱发死机。产生踩内存的的原因也比较多样,比较典型的有如下几种: 数组越界访问 字符串越界操作 直接操作野指针 操作了一块已经被释放了内存 这几种问题,单独说起来都是比较容易发现问题,但这些问题往往在某些环境中不会出现,但是在另外的环境下几乎是必现问题,这时定位起来难度就便增加了很多。这种情况往往是基本逻辑没有问题,在某些环境下(多核、异步、其他复杂环境等)逻辑上出现错误导致出现踩内存的问题。 下面我.

遇见你是我最美丽的意外 6686

(c语言)踩内存和地址越界

你是否在总是听到“内存越界”,“指针指向了非法地址”等常见问题呢?但是在面试过程中总有一些学术严谨(装13)的面试官给这一类问题取个名字-踩内存。踩内存:访问了不该访问的地址。

qq_42835526的博客 367

踩内存问题分析方法

比较麻烦的在于程序奔溃点在之后的某个时间出现。此时array为全局数组,则被踩坏的内存也属于全局数组(除非array定义在全局区域的边缘),此种情况比较容易查找,通常也是由于index越界引起,可通过被踩坏内容的特征往前推,大致推导开始踩的位置,找出对应的全局变量后检查代码逻辑,看是否存在溢出。看到func没有对参数i做范围检查,极可能传进的i超过10,甚至是负数,这就无法知道被踩坏内存位置和自己内存位置,此种问题也是最难查的,因为可能每次奔溃的情况都不一样。1.1.2. 栈溢出。

x-2010的笔记 2703

c 语言重新封装malloc,c语言内存泄漏检测方法之封装malloc,free详解

evn:gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)摘要:方法简介如何检测项目中是否有内存泄漏(附代码)如何定位项目中的内存泄漏(附代码)心得和建议1.方法简介这种方法原理很简单, 正常情况下程序启动到正常终止malloc和free调用的次数应该相同, 如果malloc调用次数>free调用次数, 那么项目中就会出现内...

weixin_29122543的博客 526

Camera ITS测试

一、手机端设置: 将 CtsVerifier.apk 安装到设备上, 连接上linux主机。 二、主机端设置: 基础:CTS测试运行环境 然后,主机安装python2.7,及numpy/scipy/matplotlib/opencv 栈和 python 成像库。按照下面的命令依次安装: sudo apt­-get install python-­numpy sudo apt-­g...

wangubuntu的专栏 7784

SECS/GSM 测试工具 SecsExpress 的配置与实战应用

本文详细介绍了半导体设备通讯测试工具SecsExpress的配置与实战应用。作为专业的SECS/GSM协议调试工具,它能模拟Host与设备端进行双向测试,帮助工程师快速部署、验证通讯链路,并高效排查与RMS系统或真实设备间的联调问题,是提升半导体工厂设备集成与维护效率的利器。

yhn456789的博客 298

linux 内存检测工具之memleak

MemLeak 是一个C语言内存泄漏检测工具。 原理是利用 C 语言的宏调用来替代原有的函数调用, memleak 维护了一个链表,在这个链表中保存着程序中对内存函数调用的记录,这些函数包括:malloc、calloc、realloc、free。

Tony的专栏 6418

keil4.72添加GD32F10x芯片

1. 下载 GD32F10x_AddOn_V2.0.1.rar,解压缩。 2. 安装 运行GigaDevice.GD32F10x_AddOn.2.0.0.exe 安装位置 再新建工程,发现已经有GD32F10x 3. 增加的文件分析 运行GigaDevice.GD32F10x_AddOn.2.0.0.exe后,在keil文件夹种增加文件如下: ...

TrueLink的博客 2762

Malloc内存泄露和内存越界问题的研究

Malloc内存泄露和内存越界问题的研究 ------内存跟踪与检测篇 1.     引言 熟悉c语言的人都知道,内存泄露,特别是内存越界是软件界非常棘手,甚至防不胜防的问题。由于这种问题一般为概率问题,时而出现时而不出现,这样给问题的定位分析带来很大的困难,后期排查的代价也比较大,因此,这个问题一直困扰着软件开发人员和软件界。不管多牛的技术高手,甚至技术专家都不敢拍着胸脯说,他负责

mangguoni的专栏 1535

[Dify 实战] 如何在内网环境部署 Dify 应用:彻底离线的企业级方案解析

企业内网环境如何离线部署Dify?本文提供详细教程:Dify作为开源AI平台,支持完全离线部署,无需外网访问。文中介绍两种部署方式:推荐使用Docker一键部署,也可选择源码安装定制化方案。重点讲解内网模型配置(支持Ollama/GPT-OSS等)、知识库存储(MinIO/PostgreSQL)及内网代理设置,并给出常见问题排查方法。该方案适用于金融、政府等对数据安全要求高的场景,确保敏感数据不泄露,实现完全本地化的AI应用闭环。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 452

ZYNQ 使用AXI_BRAM实现PS与PL 数据交互数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过Block RAM实现。通过Zynq 的GP Master 接口读写PL端的 BRAM,实现PS与PL的交互。加入自定义的 FPGA 程序,并利用 AXI4 总线进行配置,通知何时读写 BRAM。CPU通过 AXI BRAM Controller 读取 BRAM 数据,CPU 仅配置自定义的 PL BRAM Controller 的寄存器,不通过它读写数将BRAM与socket进行联合使用,将电脑的数据发到PS端,PS端放在PL端,PL端再发给PS端,P据。

wangjie36的博客 1万+

Linux内存调试工具初探-MEMWATCH

内存泄漏(即 malloc() 内存在对应的 free() 调用执行后永不被释放)和缓冲区溢出(例如对以前分配到某数组的内存进行写操作)是一些常见的问题,它们可能很难检测到。它使用C于处理器的功能,Memwatch使用它自己定义的功能函数取代所有在你的程序中用ANSI C定义的内存分配函数,Memwatch的内存分配函数包含了了所有的分配记录信息。清单 1 中的代码将分配两个 512 字节的内存块,然后指向第一个内存块的指针被设定为指向第二个内存块。结果,第二个内存块的地址丢失,从而产生了内存泄漏。

u011029104的专栏 675

系统安全性评估 (SSA) 详细解析

系统安全性评估(SSA)是一种自下而上的验证过程,目的是确保系统设计中的每个功能、子系统、硬件和软件的实现,符合早期通过 FHA 和 PSSA 设定的安全性需求。它通过对已实现的系统进行系统性综合评价,检验各项设计和安装是否符合预期的安全性目标,最终支持飞机的适航认证。飞行控制系统是飞机安全性设计的核心子系统之一,负责控制飞机的姿态和方向。为了确保飞行控制系统能够在各种飞行条件下保持安全运行,SSA 被用于验证该系统的设计是否满足 FHA 中设定的安全性目标。

qq_41854911的博客 1651

Linux中的常用内存问题检测工具

版权声明:本文为优快云博主「ariesjzj」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/jinzhuojun/article/details/46659155 Linux中的常用内存问题检测工具 ...

jikunbupt的专栏 1575

Python 爬虫实战:抓取新闻网站上的新闻标题和内容

随着信息化的进展,新闻网站已经成为人们获取新闻和时事资讯的主要途径。许多新闻网站提供了丰富的内容,涵盖了社会、政治、科技、娱乐等多个领域。通过抓取新闻网站的内容,我们可以分析新闻的趋势,获取某一领域的最新动态,甚至为数据分析和机器学习提供数据支持。本文将详细介绍如何使用 Python 编写爬虫,抓取新闻网站上的新闻标题和内容。requests:发送 HTTP 请求,获取页面内容。:解析 HTML 页面并提取数据。Selenium:抓取动态加载的网页内容。新闻API。

2201_76125261的博客 3407

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 150

《转载学习》C语言数组越界行为

注: 版权声明:本文为优快云博主「森明帮大于黑虎帮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/qq_44918090/article/details/120296784 一:越界代码 二:死循环原因 局部变量 i 和 arr 在栈区上被使用,因为栈区的生长方向是高地址向低地址生长,所以栈区是先使用高地址处的空间,后使用低地址处的空间,又因为数组随着下标的增长地址由低向高变化,当越界...

qq_33152179的博客 811

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

c语言内存管理和统计

此外,考虑到库函数分配的内存块通常大于所申请的内存(向上圆整),尾守护字节的开销可以忽略。堆内存泄漏检测机制的基本原理是截获对内存分配和释放函数的调用,从而跟踪每块内存的生命周期。这样,当程序结束时,链表中剩余的内存信息结点就对应那些未被释放的内存。还有一个问题,如果没有开启编译器的优化,完全按照最原始的函数返回方式处理,代码仍然按照6.4开头的代码,情况是不是:main函数调用func前先在栈中预留一个结构体变量的空间,然后调用func,fun…通过链表储存内存分配信息时,链表自身也需要分配和释放内存。

V4工厂 847

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

#内存泄露# #memwatch# memwatch

MemWatch是一个开放源代码 C 语言内存错误检测工具。MemWatch支持 ANSI C,它提供结果日志纪录。 MemWatch 主页:https://www.linkdata.se/sourcecode/memwatch/ 较常见的内存问题有下面几种,详细可参考: #内存泄露# #内存检测#Linux中的常用内存问题检测工具 https://blog.youkuaiyun.com/xia...

潇汀 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

4-Linux 内存泄漏工具

1、mtrace 应用环境:Linux GLIBC 编程语言:C 使用方法: 包含头文件mcheck.h,定义环境变量MALLOC_TRACE为输出文件名,程序开始时调用mtrace()即可。 结果输出:用户指定的文件 设计思路: 为malloc,realloc,free函数添加钩子函数,记录每一对malloc-free的执行 优缺点:只能检查使用malloc/realloc/free造成的的内存泄露 如何获取:GLIBC自带,可直接使用 2、memwatch 应用环境:Linux 编程语言:C 使用方法:

Creator_Ly的博客 624

Linux 内存泄露检测技巧

由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误。同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽这样严重的后果。无论何时何地发生内存泄漏,都可能表现为应用程序完全无法接受,同时内存泄漏不是显而易见[1]。存在内存错误的 C 和 C++ 程序会导致各种问题。如果它们泄漏内存,则运行速度会逐渐变慢,并最终停止运行;如果覆盖内存,则会变得非常脆

志存高远 1万+

memwatch使用说明书

memwatch使用说明书 1.memwatch是什么?     memwatch是C语言的内存检测器。除了检测内存的功能外,它同样可以做其它的一些事情,而我们主要还是在于讲述它的基本功能。如果你真的想要知道所有相关的具体细节,可详细查看头文件memwatch.h以及源代码。那里面有具体且详细的注释说明。 2.如何获取最新的版本?     http://www.linkdata

sxtobj的专栏 1499

Linux系统C++调试利器systemtap定位内存double free

Linux系统通过systemtap定位double free or corruption的问题

dongsongz的专栏 1293

C语言内存检测

https://www.codeproject.com/script/Membership/View.aspx?mid=4264280 Introduction Memory leak has always been a part of bugs in C code where a programmer allocates memory in run time (in heap) and fai

sinat_35297665的博客 873
上一篇: 共享库之动态连接
下一篇: python学习之路- 标准库
horst_hu
博客等级 码龄15年 38粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值