精华内容
下载资源
问答
  • Memtest是一款内存检测工具。在退出每一个正在您计算机中运行的程序。 单击 [确定] 关闭此窗口,然后单击 [开始测试]。 可以至少运行20分钟、如果MemTest内存检测工具找到任何问题,那么它将会停止并且让您知道。您...
  • 更糟糕的是,检测这些泄漏可能很困难:静态分析通常很难精确识别这些冗余引用,现有的泄漏检测工具会跟踪和报告有关单个对象的细粒度信息,产生难以解释且缺乏精确度的结果。 换句话说,泄漏要么太难以识别,要么...
  • 业界最常用的内存检测软件Memtest86的使用方法
  • Leaks内存泄露检测

    2015-08-12 15:08:53
    Leaks内存泄露检测 最近用到内存泄露,查看以前的博客,方法不错,但操作时,步骤好多都找不到啦,不知道怎么操作。所以下面做了一个简单的例子
  • 从而让被监视进程自身具有内存泄漏检测功能,代理服务程序统一处理监视模块收集到的内存信息,同时,将处理结果发送给工具端,工具端经过内存管理模块处理将内存信息实时的可视化到界面上。最后,通过可靠性试验和...
  • AIDA64是原EVEREST被收购后的升级版,采用32位的底层硬件扫描,可以支持3400多种主板,支持上千种显卡,支持对并口/串口/USB这些PNP设备的检测,支持对各式各样的处理器的侦测。支持查看远程系统信息和管理,结果...
  • 大象网写这篇文章的原因是自己遇到了内存的问题,记忆尤新的是2014年给亲戚组装的一台台式机,大概配置就是下面这样,翻了半天电脑上的配置好不容易找到这台电脑。Intel 酷睿i3 3220(散)华擎B75M-DGS R2.0金士顿4GB ...

    大象网写这篇文章的原因是自己遇到了内存的问题,记忆尤新的是2014年给亲戚组装的一台台式机,大概配置就是下面这样,翻了半天电脑上的配置好不容易找到这台电脑。

    Intel 酷睿i3 3220(散)

    华擎B75M-DGS R2.0

    金士顿4GB DDR3 1600

    希捷 Barracuda 500GB 7200转 16MB SATA3

    HIS 7770 1G标准版(考虑有小孩玩游戏,后来没装)

    先马破坏神

    全汉蓝海400

    九州风神 玄冰智能版

    AOC E2250Sd

    罗技 MK120

    从某种方面来考虑,内存缺陷所引起Windows系统的问题,概率极低。但电脑黑屏,死机或者蓝屏,首先都该考虑内存内存不良或者温度及其他内部硬件氧化的问题;而这个时候Windows自带内存诊断工具来帮你检测电脑内存的稳定就是很必要的了。

    这台电脑倒不是当时就出问题,大约过了三个月到半年才出现电脑特别卡的状况,不过除此之外没有任何问题。许久之后当时找到了他们当地的电脑维修店,居然说硬盘坏了,要换硬盘,这不是扯蛋么?不过我带着U盘测试半天就是卡,硬盘也检测了,一点问题都没有,不过点什么基本都需要过两秒才能打开,哪怕是打开一个文件夹。后来装系统不了了之(多亏是亲戚,否则·····),记得当时弄了大约一天,也没有考虑到是内存的问题。

    5d0ec6c95830a5323e77e1a9d1a0e57d.png

    开始菜单—-Windows 附件—-Windows 内存诊断

    2d6fad7a31b16709c00f13ccf0e9f794.png

    立即重新启动并检查问题(推荐)

    a2b2e60552654bdb44a5847794ea1ff5.png

    通常情况下默认进行诊断测试即可,当然你也可以在执行界面按 F1 来选择「测试组合」

    基本:基本测试为 MATS+、INVC 和 SCHCKR(启用缓存)。

    标准:标准测试包括所有基本测试,以及 LRAND、Stride 6(启用缓存)、CHCKR3、WMATS+ 和 WINVC。

    扩展:扩展测试包括所有标准测试,外加 MATS+(禁用缓存)、Stride38、WSCHCKR、WStride-6、CHCKR4、WCHCKR3、ERAND、Stride6(禁用缓存)和 CHCKR8。

    内存测试过程比较长,我们可以看一会看电视或者玩一局王者荣耀之类的小游戏,测试完成之后会自动登录系统,这时候别着急,我们来看一下系统对内存的诊断结果。

    041278f9deb91ca6f81c1ffced629802.png

    开始菜单—-Windows附件—-命令提示符—-eventvwr—-回车(就能看到事件查看器了)

    feb6782d1b5868e1d1bc6d0bd22fc518.png

    选中MemoryDiagnostics-Results

    65d03f518fd21eb786ce1f36e9681a9d.png

    这里就能看到内存的诊断结果了。

    除了上面的方法我们也可以使用MemTest来测试(PE系统基本都有这个工具),可以躲开几个来测试毕竟我们的电脑现在基本都是多核心了;不过使用这个工具MemTest的同时最好多测试几遍。

    大象网这篇文章中的方法支持Window 7和Windows 10所有版本,省去了下载的麻烦,怀疑内存问题的同学可以用Windows自带内存诊断工具来帮你检测电脑内存的稳定。

    展开全文
  • MemWatch由 Johan Lindh 编写,是一...MemWatch支持 ANSI C,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneous free)、内存泄漏(unfreed memory)、溢出(Overflow)、下溢(Underflow)等等。
  • 内存测试_内存检测工具大全

    万次阅读 2020-01-25 22:12:05
    测试内存,往往不局限于一种软件,因为每种工具都有自己的局限性。灵活运用多种工具,是为了实现最大的测试效果,提升产品质量 ...①它是当年少数可以在Windows操作系统中运行的内存检测软件之一(传统...

    测试内存,往往不局限于一种软件,因为每种工具都有自己的局限性。灵活运用多种工具,可以实现效益最大化

    1、《HCI MemTest》

    https://hcidesign.com/memtest/

    HCI MemTest恐怕是世界上用户最多的内存测试软件

    它之所以如此出名,我认为有以下几点原因:

    ①它是当年少数可以在Windows操作系统中运行的内存检测软件之一(传统的内存测试均是在DOS或Linux下实现的字符界面)

    ②该软件使用非常简单,并且在网上可以随意搜索下载到汉化破解版本。很多盗版系统光盘、PE工具里面都集成了该工具

    它的免费版本需要手动多开(Free版有2GB限制),于是有国人针对的做了MEMTEST多开器《RunMemtest PRO》(噹)

    HCI MemTest适合作为内存稳定性、兼容性测试工具,特别适合用于验证内存超频稳定性

    HCI MemTest是大多数电商PC售后客服的标配工具(因为客户操作起来简单,无需做启动盘)。根据经验,测试到100%可诊断出明显的内存故障;检测间歇性暗病的测试率要达到400%。此工具可以测试出百分之九十以上的故障条。注意:在云更新无盘环境下,因为部分内存作回写缓存,应用层不可访问,HCI MemTest存在误报的现象

    2、《MEMTEST64》

    https://www.techpowerup.com/memtest64/

    它是鼎鼎大名的GPU-Z团队开发,同样是免费的,可以下载到汉化版。支持随机数据测试、移动数据测试、位模式测试

    它的优点:

    ①64位访问内存,无须像HCI MemTest那样开多个窗口(故不支持32位系统)。支持CPU多线程,测试速度比同类软件快

    ②测试内存所占大小可选择(一般验证超频不需要做完整大小测试,至少15%区域即可)

    ③可指定测试次数和测试时间。可让错误时停止测试,避免过多触发内存坏块而导致蓝屏

    它的缺点:

    ①在WIN10下,有较大几率会出现“内存锁定失败(可能由其它应用程序/内核保留)”,也就是分配内存失败,需要重启再点测试

    ②在WIN10下,有较大几率会出现分配占用内存过小的问题,这意味着不能检查所有区域,需要重启再点测试

    ③在WIN10下,测试内存会伴随着较大的硬盘写入(可能与“将其他应用程序推送到硬盘虚拟内存中以释放物理内存有关”)

    威刚售后客服曾说MEMTEST64与1809系统不大兼容。笔者用此工具做内存兼容性、稳定性测试,也用来测试HCI MemTest、MEMTEST86检测不出的坏件,发现此工具对镁光(英睿达)铂胜马甲内存、七彩虹内存(4bit颗粒)十分敏感,一分钟左右即可将故障显现。

    三、AIDA64稳定性测试

    http://www.aida64.com.cn

    Aida64测试工具有一项System Stability Test,可以测试稳定性和兼容性,不过国人一般用它来测试散热(比如单拷FPU)。AIDA64的测试压力强度确实不如LINX和Prime95,不大适合作为内存超频验证工具。笔者用它来做内存稳定兼容性测试工具,也用于测试MEMTEST扫不出故障的内存条。在遇到硬件故障时,AIDA64通常会报以下错误:

    测内存可单独勾选“Stress System Memory“

    AIDA64的优势在于可以实现自动化测试,其命令行使用极其方便(仅支持商业版和工程师版)

    @echo off
    :start
    AIDA64 /SST CPU,FPU,CACHE,RAM /SSTDUR 15 
    echo System Stability Test Pass
    pause

    SST后面表示要测试的硬件项目,SSTDUR后面表示要测试的时间。即测试15分钟后终止测试,并显示测试结果

    上述三种,它们属于应用层内存检测工具。这些设计者无须关心DDR是几代、芯片组型号、CPU型号、是否ECC、主板BIOS等硬件底层的因素,只需要关心校验算法和优化检测效率。即使在这篇文章写下之时,DDR5还没有上市,但可以断言,上述三种工具,可以测试DDR5内存。而无须随着DDR5内存的上市而进行版本迭代。应用层面的内存检测几乎不存在误报现象,但漏报率大于专业的内存诊断软件。由于现代操作系统会占据大量的内存,导致某些内存区域无法被访问检测到

    下面再来介绍几种专业工具:

    四、《MEMTEST86》与《MEMTEST86+》

    https://www.memtest86.com

    http://www.memtest.org/

    MemTest86最初由Chris Brady(克里斯·布雷迪)开发,于1994年首次发布。但是,所使用的某些测试算法可以追溯到1981年,MemTest86最初是作为免费开源(GPL)软件发布的。后来在3.0版停止更新了两年,为了支持新的硬件,Samuel Demeulemeester在Memtest86的基础上开发了Memtest86+,命名很不幸,因为它导致了现在用户认知的混乱。不管怎样,随后双方都继续开发各自的MEMTEST86。MemTest86 + V5.0和MemTest86 V4.3的功能集在2013年大致相等。也是在2013年,有人提出将两个代码流重新合并到一个程序包中的提议,但Samuel希望不合并这些版本。后来Chris Brady将Memtest86的版权卖给了PassMark(世界上著名的硬件测试软体开发商)。Passmark在原有的代码之上,增加了64位支持(无须PAE)、UEFI自启动、DDR4支持,并且注册Memtest86为商标,把MEMTEST86变为了闭源商业软件(对于普通用户是完全免费的)。而MemTest86+ 5.01版本的开发似乎已经停止。在撰写本文时(2020年2月),自2013年以来没有更新。2013年时,还处在DDR3时代,所以MEMTEST86+在测试某些DDR4平台的时候会遇到误报和漏报问题,所谓误报,就是内存无故障却报错;漏报,就是内存有故障,却不报错。这主要是由于缺乏硬件层面支持造成的。PassMark MEMTEST86在旧版V4的基础上增加了第13项测试 [Hammer Test],可以检测出更多有缺陷的颗粒。虽然不建议在DDR4上使用老旧的MEMTEST86+,但因为PassMark MEMTEST86不再支持传统BIOS启动(仅支持UEFI),所以在DDR1\DDR2\DDR3机器上,MemTest86+ 5.01仍然有一番用武之地。

    MEMTEST86扫描一根8G DDR3或8G DDR4仅需要不到30分钟,而同类产品往往需要一个小时

    PassMark MEMTEST86内存测试算法经过二十余年的不断完善,可以有效地识别99%以上的内存故障。因此,系统制造商,电脑维修店,超频者和PC制造商经常使用它,MEMTEST86几乎成了业界事实上的标准测试和验证工具,很多工厂级测试工具都是基于它开发的。大多数内存厂商在检测过程中也会用到它(特别是套条),如果你买的内存用MEMTEST86扫出有故障,那么内存厂商也是认可这个测试结果的。

    五、《微软内存诊断工具》

    微软内存诊断工具英文名称windows memory diagnostic tool,是最常见而又被忽视的内存测试利器。它最早集成于windows安装光盘,从VISTA时代开始内置于系统中。

    早期的界面是这样的:

    WIN7时代是这样的:

    开机windows启动菜单可以找到。进入系统后运行MdSched,也可以调出。

    默认设置是测不出细微故障的,需要按F1选择扩展测试。从算法上看,扩展测试精确度不错,但是十分耗时,8G内存测试长达一整晚时间

    基本:基本测试为 MATS+、INVC 和 SCHCKR(启用缓存)。标准:标准测试包括所有基本测试,以及 LRAND、Stride 6(启用缓存)、CHCKR3、WMATS+ 和 WINVC。扩展:扩展测试包括所有标准测试,外加 MATS+(禁用缓存)、Stride38、WSCHCKR、WStride-6、CHCKR4、WCHCKR3、ERAND、Stride6(禁用缓存)和 CHCKR8。

    六、《RAM STRESS TEST

    https://www.rst.com

    RST是一款由美国Ultra-X公司开发的工厂级测试工具,专为满足内存制造商、系统制造商、设计工程师和维修人员的严格测试需求而设计的。后来流落到民间,它能够检测出内存条是否存在颗粒损坏、PCB板有没有短路或虚焊等情况,据说镁光、海盗船、金士顿、海力士都是它的典型客户。自1999年推出以来,RST树立了测试准确性的标杆,并已成为业界事实上的标准测试和验证工具。RST拥有30多种专有测试模式,产品以硬件的形式售卖,有PCI、PCI-E、USB多种版本。具有无与伦比准确性。

    网上能找到最新的破解版是RST PRO USB3(2007年发布),最大内存容量64GB,不支持UEFI启动

    这个公司不卖软件,都是以硬件方式售卖,可以最大限度减少盗版。中国大陆买不到,而且售价很高,至少数百美金

    七、《AMT64MP》

    AMT64全称64-Bits Advanced Module Test program,是专为工厂及内存条商家开发的硬件测试卡,适合内存条加工厂及内存条零售市场商家使用。AMT64MP是在AMT64基础上的升级产品,支持多核心处理器,以加快检测速度。可以将故障定位到具体颗粒(需要特定主板的支持,比如B75\B85\Z170),一般作为维修工具。从测试项目上看,它借鉴了MEMTEST86、MEMTEST86+、RST的某些算法,测试项目16个,应该具有较高的精度和测试速度。笔者花68元从咸鱼上买了一块,在200系、300系主板上虽然不支持坏颗粒定位,但同样能够进行错误扫描。同样不支持UEFI启动,需要开启CSM方能启动。最新的产品名为AMT128,可支持在B360、Z370主板下定位坏颗粒

    八、《DocMemory》

    https://www.simmtester.com/ProductDocMemory

    DocMemory中文名为《内存神医》,它早期是一种免费软件,作者后期做成了硬件产品的形式。该公司研发重点在于内存测试仪,DocMemory测试卡自2009年就未再更新过了,最多支持到DDR3。DocMemory V3.1是能够下载到的绝版,不支持4G以上内存

     

    九、《RAMFIX V110516B》

    RAMFIX V110516B是国人基于MEMTEST86开源项目做出的一个测试软件,可定为到具体故障颗粒。不过已经多年没更新过了,已经被作者放弃了

    十、《Smart RAM Detect 1.1》

    https://www.ramcenter.com.tw

    Smart RAM Detect 1.1在谷歌上都很难找到资源了,是台湾瑞腾特开发的,不支持4GB以上内存。该公司目前只生产硬件产品了

    十一、《Memtest Jacky V1.6》

    在MEMTEST86基础上做的颗粒地址定位,DDR1以上内存可能无法精确定位坏颗粒

    十二、《GoldMemory

    http://www.goldmemory.cz

    GoldMemory是捷克人Michal Tulacek编写的,免费版6.92自2007年未再次更新过,付费版7.98支持DDR4,但也数年未更新

    此软件在东欧国家使用比较普遍,大多被集中到了盗版光盘中,可以从以下站点下载到7.85破解版:

    http://89.236.197.208/Public/BELOFF/Beloff%202015%20FUll/BOOT/IMG/GOLDMEM.IMG

    http://www.vvg.su/data/Data/Soft/BOOT/IMG/GOLDMEM.IMG

    基于PAE支持64G内存,支持快读、标准、完全三种测试模式,仅支持传统引导,不支持UEFI模式

    一路走来,我们发现很多优秀的软件都死掉了,研发不易,且行且珍惜

     

    展开全文
  • 相比较其它的内存泄露检测工具,它在检测内存泄漏的同时,还具有如下特点:  1、 可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;  2、 可以得到泄露内存的完整数据;  3、 可以...

    什么是vld?

    Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具。相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点:
      1、 可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;
      2、 可以得到泄露内存的完整数据;
      3、 可以设置内存泄露报告的级别;
      4、 它是一个已经打包的lib,使用时无须编译它的源代码。而对于使用者自己的代码,也只需要做很小的改动;
      5、 他的源代码使用GNU许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。

    从使用角度来讲,Visual Leak Detector简单易用,对于使用者自己的代码,唯一的修改是#include Visual Leak Detector的头文件后正常运行自己的程序,就可以发现内存问题。从研究的角度来讲,如果深入Visual Leak Detector源代码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。

    qt5如何使用vld查看内存泄漏?

    1、确保调试器使用的是MSVC2015 32而不是minGW 32.更改教程可查看链接:https://blog.csdn.net/youarenotme/article/details/107444429;
    2、下载VLD,下载地址:https://kinddragon.github.io/vld/;
    3、安装VLD后,将“vld安装目录/include”下的vld.h和vld_def.h文件拷贝到Qt默认的include目录下,将“vld安装目录/lib/Win64"(这里注意根据自己安装的qt库位数决定)下的vld.lib拷贝到Qt默认的lib目录,就完成安装了;
    4、修改要测试项目的main.cpp文件,在main函数上面添加以下代码:
    include<vld.h>
    5、在debug模式下(一定是运行而不是调试,否则无法查看到内存泄漏的具体代码行,具体原因暂未查到)运行程序,确保要检查的代码块被执行后,正常关闭程序;
    6、在“应用程序输出”窗口查看检查结果。若结果中有“No memory leaks detected.”则表示无内存泄漏。

    VLD一些有用的选项

    VLD提供了一些配置项,可以通过vld.ini设置,默认情况将使用安装目录下的vld.ini,也可以将vld.ini拷贝到程序运行目录,这样仅当运行该程序时生效。
    MaxTraceFrames:输出的堆栈级数限制

    AggregateDuplicates:若为"yes",则只在报告中输出特定泄漏位置的第一次泄漏

    MaxDataDump:转储数据大小限制

    ReportTo:内存泄漏报告的输出形式,可以使用"debugger"、 "file"或者 “both”

    ReportFile:内存泄漏报告的文件名,默认"memoryleakreport.txt"

    VLD实现原理

    Vld通过修改IAT表将crt的调用替换为自己的实现,并记录分配时的调用堆栈,相比通过宏替换new/delete、malloc/free,具有以下好处:

    1、无需编译时对每个c/c++文件都包含指定头文件

    2、可以运行时控制内存泄漏检查策略

    3、具有很好的扩展性,例如支持vc11引入的_aligned_malloc

    以上思路可用于检查其他泄漏,例如用户对象泄漏、GDI泄漏、句柄泄漏等

    展开全文
  • 1使用windbg检查 1.1、 工具下载 下载地址:http://www.technlg.net/windows/windgb-download/ 注意:最好下载x64位的安装包,因为32位的安装包可能会安装不成功。 1.2、环境配置 计算机-》右击-》属性-》高级系统...

    1、使用windbg中的umdh检查

    1.1、 工具下载

    下载地址:http://www.technlg.net/windows/windgb-download/
    注意:最好下载x64位的安装包,因为32位的安装包可能会安装不成功。

    1.2、环境配置

    计算机-》右击-》属性-》高级系统设置-》环境-》系统变量-》Path-》编辑-》变量值 处后加入:

    c:\Program Files\Debugging Tools for Windows(x64)
    

    注意:此路劲请参考个人的安装路径。

    1.3、利用工具umdh(user-mode dump heap)分析

    (1)由于在安装路径下有 gflags.exe、umdh.exe 这两个可执行文件,且在步骤2中已加入环境变量,下一步可直接在dos界面输入命令;

    (2)桌面左下角-》开始 处输入cmd命令,打开dos界面窗口后,输入命令:gflags.exe,会出现下图,并按照下图进行相关设置:
    在这里插入图片描述
    在这里插入图片描述
    (3)gflags标志设置好后,开启cmd
    在这里插入图片描述
    键入要定位内存泄露的程序gflags.exe /I memroyleak.exe(程序名称)+ust
    如图成功后,开启memoryleak.exe程序,即运行需要测试的程序。

    1.4、利用umdh创建heap快照

    在这里插入图片描述
    命令格式:umdh –pn:memoryleak.exe(程序名称) –f:snap1.log(日志名称)
    程序运行一段时间后或者程序占用内存增加时,将memoryleak.exe退出。
    然后再次创建heap快照,命令行无差别,snap1.log改为snap2.log或者其他。

    设置好程序的符号路径,如下图:
    在这里插入图片描述
    设置好后可以开始分析heap前后两个快照的差异
    在这里插入图片描述
    分析差异命令:umdh –d snap1.log snap2.log –f:result.txt
    在这里插入图片描述
    分析完成后查看结果result.txt,可以指定具体的输出文件夹,不指定的话,输出在桌面的个人文件夹《以自己名字命名的文件夹》

    红色为umdh定位出来的泄露点,我们在查看源代码
    在这里插入图片描述
    这样我们就可以修改代码中内存泄露的地方了。

    注意:利用Umdh创建Heap快照 步骤设置程序的符号路径,此符号路径是一个在线网址,因此需要电脑联网;对于我们来说只能通过下载符号离线包的方式,离线包的路径为:

    https://developer.microsoft.com/en-us/windows/hardware/download-symbols

    关键词:Download Windows Symbol Packages

    但是不下载此包,符号路径会自动设置为 %windir%\symbols 即windows自带的符号路径,目前未发现问题

    参考网址:http://blog.csdn.net/chenyujing1234/article/details/11918987

    2、使用windbg中的htrace检查

    2.1、准备工作

    1 打开windbg
    2 File->Symbol File Path,配置好符号文件(PDB)
    在这里插入图片描述
    3 File->Attache to a Process->可以选择一个运行中的进程,并对其进行调试。
    image.png

    2.2、快照

    1 让程序运行(按F5或输入命令:g)
    2 程序执行到想要快照的时候,中断程序(Debug->Break)
    3 开启句柄栈回溯(输入命令:!htrace -enable)
    4 抓取快照(输入命令:!htrace -snapshot)

    2.3 、执行操作,比较差异

    1 让程序运行(按F5或输入命令:g)
    2 执行操作
    3 中断程序(Debug->Break)
    4 !htrace -diff

    2.4、找到代码行

    1 查看泄漏的句柄
    从下图中可以看出有一个句柄泄漏,该句柄时通过CreateEvent创建出来的事件,通过栈回溯可以看出该事件创建事件的函数:vlc_tester::on_pB_Open_clicked。
    image.png

    2 查找具体的代码行
    lsa vlc_tester!vlc_tester::on_pB_Open_clicked+0x000000000000002c
    从下图中可以看出具体的代码。
    image.png

    3 如果在栈回溯中看不到有用信息,还可以考虑在代码中打印出线程ID,再与句柄泄漏所在线程对比,确认在哪个线程泄漏的,缩小范围。
    4 根据栈回溯的模块或模块地址也能找到是哪个模块泄漏的句柄。

    2.5、Process Explorer

    Process Explorer
    1 显示句柄详细信息
    在这里插入图片描述
    2 查看程序占用的句柄,如果是命名句柄,可以可以直接在代码中找到该句柄
    在这里插入图片描述
    参考网址:https://www.jianshu.com/p/3c88d5adc7bc

    3、windows下内存泄漏–CRTDBG

    3.1、检测是否存在内存泄漏

    Windows平台下面Visual Studio 调试器和C运行时(CRT)库为我们提供了检测和识别内存泄漏的有效方法,原理大致如下:内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏。在vs中启用内存检测的方法如下:

    (1)、程序文件开头处包含以下语句,不要更改顺序

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    

      通过包括crtdbg.h,将malloc和free函数映射到它们的调试版本,即_malloc_dbg和 _free_dbg,这两个函数将跟踪内存分配和释放。 此映射在调试版本(在其中定义了_DEBUG)中发生。 发布版本使用普通的 malloc 和 free 函数。
      #define 语句将 CRT 堆函数的基版本映射到对应的“Debug”版本。 并非绝对需要该语句;但如果没有该语句,内存泄漏转储包含的有用信息将较少。
    (2)、在添加了上述语句之后,可以通过在程序中包括以下语句(通常应恰好放在程序退出位置之前)来转储内存泄漏信息:

    _CrtDumpMemoryLeaks();
    

    示例代码:

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    
    int main(int argc,char** argv)
    {
        char *str = (char*)malloc(20 * sizeof(char));
        _CrtDumpMemoryLeaks();
        return 0;
    }
    

     当在调试器下运行程序时(按F5),_CrtDumpMemoryLeaks将在VS最下栏 “输出”窗口 -》显示输出来源-》调试 中显示内存泄漏信息。如果没有使用#Define _CRTDBG_MAP_ALLOC语句,输出窗口则不显示内存泄漏的具体位置。
    注意:
      如果程序总是在同一位置退出,调用 _CrtDumpMemoryLeaks 将非常容易。如果程序从多个位置退出,则无需在每个可能退出的位置放置对 _CrtDumpMemoryLeaks 的调用,而可以在程序开始处包含以下调用:
    _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
     该语句在程序退出时自动调用 _CrtDumpMemoryLeaks。必须同时设置 _CRTDBG_ALLOC_MEM_DF 和 _CRTDBG_LEAK_CHECK_DF两个位域。

    【特别注意】如果调用了第三方库,需要在第三方库入口的函数处调用“_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );”, 例如第三方库有init, process, uinit三个函数,在process函数里代码开头的地方加。
    示例代码:

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    
    int main(int argc,char** argv)
    {
        char *str = (char*)malloc(20 * sizeof(char));
        _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
        return 0;
    }
    

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    
    
    void check_mem()
    {
    	_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    }
     
    int main(int argc,char** argv)
    {
        char *str = (char*)malloc(20 * sizeof(char));
        atexit(check_mem);
        return 0;
    }
    

    注:上述方法在测试调用的第三方库是否存在内存泄漏时,并不能显示泄露函数在哪个文件、哪一行,只会简单的显示,如:

    Detected memory leaks!  
    Dumping objects ->  
    {223} normal block at 0x003CF650, 4 bytes long.  
     Data: <  < > E8 F6 3C 00  
    

    此时,需要在程序的入口处加入:

    _CrtSetBreakAlloc(223);
    

    在vs中按F5调试,在堆栈信息中就可以看到泄露的具体位置。其中223表示{223} normal block at 0x003CF650, 4 bytes long.

    参考网址:https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx
    参考网址:https://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html

    展开全文
  • 内存检测2.1.1.apk

    2021-06-02 17:15:25
    适用于安卓新硬件设备的ram和emmc检测的工具,实时记录每一次的结果到文件,错误日志,可以进行长期性测试
  • windows下内存检测工具

    千次阅读 2019-05-28 16:22:24
    1、Intel的Parallel Inspector工具,和vs集成超好, 而且还带了线程检测工具. 2、Purify 3、CodeGuard 4、MemCheck 5、Valgrind 6、Insure++
  • 工具/材料:以鲁大师为例。1、首先单击桌面上的“鲁大师”图标...在常规内存上已识别我不想拉内心的话请问鲁大师请参阅有三种基本方法可以检查计算机内存模块的品牌:一、检查手册:如果是品牌计算机,通常会随附计...
  • 前面文章已经讲解过如何使用LeakCanary快速的排查Android中的内存泄露,链接地址:LeakCanary-------快速简单排查Android中的内存泄露,这篇文章将从源码的角度分析LeakCanary排查内存泄漏的原理。 2.主要原理 ...
  • 出现内存问题,我们可以采用系统自带的工具进行内存检测,可是很多用户不知道Win7怎么使用自带工具进行内存检测,为此小编赶紧整理了以下教程帮助大家,大家赶紧看看吧!方法/步骤:1、对于Win7系统,在开始界面搜索...
  • C++ 内存泄漏检测方法

    千次阅读 2018-10-26 14:43:28
    C++ 内存泄漏检测方法一,Mfc程序的内存泄漏检测二,普通c++程序的内存泄漏检测三,未完待续,,, 程序中通常包含着静态存储区和栈内存。静态存储区也就是静态内存,是用来保存局部static对象、类static数据成员...
  • 今天玩吃鸡,突然很卡,奇了怪,我买的可是战神啊。...最后用Windows自带的内存检测工具,检测了一次,大概10-20分钟的样子,提示也没发现什么异常,但是检测完后自动重启就好了,可怕,我可能不是中毒了,是中邪了。
  • iOS检测内存泄漏的方法

    千次阅读 2018-07-25 13:54:17
    在网上过几篇博客下面这篇是比较好的 分析了几种内存泄漏。 常用的内存调试技巧,包括以下几种: 启用Zombie Object进行悬挂指针的检测。 应用Product -&gt; Analysis进行内存泄露的初步检测。 可以在...
  • 随着数字化的发展,现在市面上出现了很多内存检测工具,它们可以检测出内存的稳定度以及测试记忆的储存与检索资料的能力。国内使用最多的就是memtest。今天,我就将memtest的使用方法分享给你们在计算机中,内存扮演...
  • 如何检查内存泄露问题

    千次阅读 2019-03-18 11:54:48
    简单说一下在没有工具的情况如何运用VC库中的工具来检查代码的内存泄漏问题。 一:内存泄漏 内存泄漏是编程中常常见到的一个问题,内存泄漏往往会一种奇怪的方式来表现出来,基本上每个程序都表现出不同的方式。...
  • Linux下代码内存泄漏检测工具Asan。 Asan为GCC编译器自带的内存泄漏检测工具(大于GCC某个版本号的都有),编程环境为Qt5.12.5。 QMAKE_CXXFLAGS 段最后面增加以下内容: -fsanitize=address -fsanitize-recover=...
  • 使用Windws内存诊断工具检查内存可靠性内存如果存在问题的话会让我们很伤脑筋,所以我们很多时候都需要内存检测工具。但其实,windows也是有内存检测工具来检测内存的,我们可以手动运行这些工具来检查内存。对于...
  • Mac平台上的ATOMIC内存检测工具

    千次阅读 2019-06-12 13:32:39
    Micromat ATOMIC for Mac是Macintosh推出的高级内存测试仪,一键点击即可快速为系统内存进行全面测试,ATOMIC Mac版的功能非常实用,如果你想要对自己的机器进行故障排除,那么ATOMIC内存检测工具将会是一个很好的...
  • Valgrind工具之内存检测

    千次阅读 2018-06-10 15:59:55
    安装完成后,本篇将从五个方面描述valgrind对内存检测: 1. 使用未初始化的内存 有如下程序1: #include using namespace std; int main() { int a[5]; int i,s=0; a[0]=a[1]=a[3]=a[4]=0; for(i=0;i;i++) ...
  • 因此,在这篇文章中我将介绍7个不同的Python工具,来检查代码中函数的执行时间以及内存和CPU的使用。 1. 使用装饰器来衡量函数执行时间 有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果:  ...
  • 是一款运行时C/C++内存泄漏分析工具,其检测结果专业、准确,操作却极其简单,可以帮助C/C++程序员迅速解决内存泄漏。TMM中引入GC机制,内存泄露检测准确率可达100%,无需内存快照,不影响目标程序性能,极简操作,...
  • “棱镜门”事件的曝出,使得Cisco路由器的安全性问题越来越受到重视。从提升网络环境安全性的角度...实验结果证明,该方法可以有效地检测针对Cisco IOS的内存溢出攻击,并可以追踪攻击的来源,有利于网络安全性的提升。
  • Dr. Memory内存检测工具

    千次阅读 2018-09-18 10:30:20
    Memory 是一个开源免费的内存检测工具,它能够及时发现内存相关的编程错误,比如未初始化访问、内存非法访问以及内存泄露等。与 Valgrind 类似,可以直接检查已经编译好的可执行文件。用户不用改写被检查程序的源...
  • 当看到下图,因检查内存条问题时,会导致电脑遗失资讯或停止工作,所以请关闭所有运行的程式与保存编辑中的资料,再选择立即重新启动并检查,或是下次启动电脑时再检查。我选择立即重新启动来检查,画面随即关闭所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 735,682
精华内容 294,272
关键字:

内存检测结果怎么看

友情链接: Divide.zip