1.如何检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。
内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。可以使用相应的软件测试工具对软件进行检测。
1. ccmalloc——Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。2. Dmalloc——Debug Malloc Library.3. Electric Fence——Linux分发版中由Bruce Perens编写的malloc()调试库。
4. Leaky——Linux下检测内存泄漏的程序。5. LeakTracer——Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
6. MEMWATCH——由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。7. Valgrind——Debugging and profiling Linux programs, aiming at programs written in C and C++.8. KCachegrind——A visualization tool for the profiling data generated by Cachegrind and Calltree.9. Leak Monitor——一个Firefox扩展,能找出跟Firefox相关的泄漏类型。
10. IE Leak Detector (Drip/IE Sieve)——Drip和IE Sieve leak detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。11. Windows Leaks Detector——探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。
12. SAP Memory Analyzer——是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。13. DTrace——即动态跟踪Dynamic Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。
14. IBM Rational PurifyPlus——帮助开发人员查明C/C++、托管。NET、Java和VB6代码中的性能和可靠性错误。
PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。15. Parasoft Insure++——针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。
并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为Microsoft Visual C++的一个插件运行。
16. Compuware DevPartner for Visual C++ BoundsChecker Suite——为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual Studio和C++ 6.0的一个插件运行。
17. Electric Software GlowCode——包括内存泄漏检查,code profiler,函数调用跟踪等功能。给C++和。
Net开发者提供完整的错误诊断,和运行时性能分析工具包。18. Compuware DevPartner Java Edition——包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
19. Quest JProbe——分析Java的内存泄漏。20. ej-technologies JProfiler——一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。
它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。
JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。4.3.2注册码:A-G666#76114F-1olm9mv1i5uuly#012621. BEA JRockit——用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
22. SciTech Software AB .NET Memory Profiler——找到内存泄漏并优化内存使用针对C#,VB.Net,或其它。Net程序。
23. YourKit .NET & Java Profiler——业界领先的Java和。NET程序性能分析工具。
24. AutomatedQA AQTime——AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。可以为。
NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持。
Net1.0,1.1,2.0,3.0和Windows 32/64位应用程序。25. JavaScript Memory Leak Detector——微软全球产品开发欧洲团队(Global Product Development- Europe team, GPDE) 发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
2.如何检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。
内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。可以使用相应的软件测试工具对软件进行检测。
1. ccmalloc——Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。2. Dmalloc——Debug Malloc Library.3. ElectricFence——Linux分发版中由Bruce Perens编写的malloc()调试库。
4. Leaky——Linux下检测内存泄漏的程序。5. LeakTracer——Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
6. MEMWATCH——由JohanLindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。7. Valgrind——Debugging and profiling Linux programs, aiming atprograms written in C and C++.8. KCachegrind——A visualization tool for the profiling datagenerated by Cachegrind and Calltree.9. LeakMonitor——一个Firefox扩展,能找出跟Firefox相关的泄漏类型。
10. IE Leak Detector(Drip/IE Sieve)——Drip和IE Sieve leakdetectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。11. Windows LeaksDetector——探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。
12. SAP MemoryAnalyzer——是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于EclipseRCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。13. DTrace——即动态跟踪DynamicTracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。
14. IBM Rational PurifyPlus——帮助开发人员查明C/C++、托管。NET、Java和VB6代码中的性能和可靠性错误。
PurifyPlus将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。15. Parasoft Insure++——针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。
并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为MicrosoftVisual C++的一个插件运行。
16. Compuware DevPartner for Visual C++ BoundsCheckerSuite——为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual Studio和C++ 6.0的一个插件运行。
17. Electric Software GlowCode——包括内存泄漏检查,codeprofiler,函数调用跟踪等功能。给C++和。
Net开发者提供完整的错误诊断,和运行时性能分析工具包。18. Compuware DevPartner JavaEdition——包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
19. Quest JProbe——分析Java的内存泄漏。20. ej-technologies JProfiler——一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。
它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。
JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。4.3.2注册码:A-G666#76114F-1olm9mv1i5uuly#012621. BEA JRockit——用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
22. SciTech Software AB .NET MemoryProfiler——找到内存泄漏并优化内存使用针对C#,VB.Net,或其它。Net程序。
23. YourKit .NET & Java Profiler——业界领先的Java和。NET程序性能分析工具。
24. AutomatedQA AQTime——AutomatedQA的获奖产品performance profiling和memorydebugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和GNU编译器。可以为。
NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持。
Net1.0,1.1,2.0,3.0和Windows 32/64位应用程序。25. JavaScript Memory Leak Detector——微软全球产品开发欧洲团队(Global ProductDevelopment- Europe team, GPDE)发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
3.怎样发现内存泄露?
如果你是用的VC或者VS的话,可以在程序最前面增加一段:
#ifdef _DEBUG
//for memory leak check
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define CheckMemoryLeak _CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG )| _CRTDBG_LEAK_CHECK_DF)
#endif
然后在main函数的开头增加一段:
#ifdef _DEBUG
CheckMemoryLeak;
#endif
之后在程序运行完成之后调试窗口会显示有哪些块申请之后没有释放,也就是内存泄漏。
4.如何检测内存泄漏
内存泄漏有四种表现形式:
1. 常发性内存泄漏:发生内存泄漏的代码多次被执行 每次执行都致使一块内存泄漏 最终导致系统内存全部被占用
2. 偶发性内存泄漏:偶发和常发是相对的
3. 一次性内存泄漏:发生内存泄漏的代码仅仅执行一次 比如 类的构造函数分配了内存 而析构函数没有释放该部分内存 因此内存泄漏仅仅发生一次
4. 隐式内存泄漏:程序运行过程中不断分配内存 仅仅在运行结束时释放一次 严格讲这里面并没有内存泄漏 因为释放的时候会释放全部的内存 但是由于程序连续运行的时间太长 导致还没有等到结束 内存就不够了
检测内存泄漏 可以使用负载工具 不断给待测系统施加压力 同时启动一些监控工具 实时监控待测系统的内存分配回收情况
5.平板win10系统内存泄漏,怎么定位内存泄漏的程序
如果能够打开任务管理器,可以先看看进程选项卡里面的进程
在查看→选择列 中选择内存专用工作集 工作集两个
然后按从大到小排序
观察那些不断增长的进程,记录下名字
并干掉它们
再观察是否仍然继续增长
如果没有,尝试卸载那些程序(可以在没有杀死进程之前,右键,打开程序位置,找到程序源头)
另外不排除有一些是由服务导致的
记录正在运行的服务,尝试关闭那些可疑的服务
观察内存使用量
找到可疑服务后,禁用服务,然后重启,看看会不会解决问题
6.win10内存泄漏
引起内存泄漏可能是由于一些软件进程,或者是驱动程序。所以没有必要一定重装系统.
排查方法:
1,打开任务管理器,切换到“详细信息”选项卡
2,在进程列表顶部的表头(即“名称”、“pid”、“状态”等这一行字)上点击右键,选择“选择列”
3,选中“工作集(内存)”和“工作集增量(内存)”这两项
4,随后进程列表中会显示这两个新增的参数
5,在列表顶部的表头处点击新添加的这两列的名称,按照对应数值的大小进行降序排列
6,看看这两项降序排列后,排名靠前的分别是什么进程。
检测到什么进程后,再尝试关闭这些进程,或找到进程对应的程序解决。
驱动问题尝试更新所有驱动程序,包括网卡驱动。看内存泄漏问题是否解决。
7.怎样发现内存泄露
这里的客户端软件包括C/S系统的客户端和B/S系统中的客户端控件,当用户使用客户端软件时,如果发现我们的软件会吃内存,那是很丢面子的事,有哪些好的测试方法呢?希望大家能踊跃提出自己的看法。
如何发现客户端软件中的内存泄露?我的看法是:检测内存泄漏的问题应该尽早进行,它绝不应该是系统测试时的主要目标。也就是说,检查是否存在内存泄漏,应该从编码时就要考虑,单元测试和集成测试时要重点检查。
如果前期没有考虑,等到了系统测试才想起检查或者才发现泄漏,为时已晚,此时再去定位泄漏的位置,太难太难了,它可能会让你的交付日期delay不确定的时间。 最近看了一些自动错误预防(AEP)的理论,我深受启发。
作为测试人员的我们,从“发现错误”转变到“帮助开发人员预防错误”,这将是一个巨大的转变。所以说,下面我的答案中的第一点,我先说如何预防内存泄漏的问题,然后再讲如何发现。
1 如何在开发过程中有效预防内存泄漏? 第一步:遵循“好”的编程规则 “好”的编程规则是各位前辈经验和教训的集合,好的编程规则堪称开发者的“圣经”。遵循统一的编程规则,可以让开发新手少走好多弯路,可以让项目整体的质量维持一个起码的“质量底线”。
有关内存泄漏方面的规则主要是“内存管理”方面的,举几个简单的,如下 *用malloc或new申请内存之后,立即检查指针值是否为NULL(防止使用指针值为NULL的内存) *动态内存的申请与释放是否配对(防止内存泄漏) *malloc语句是否正确无误?例如字节数是否正确?类型转换是否正确 *是否出现野指针,例如用free或delete释放了内存之后,忘记将指针设置为NULL 。 。
第二步:积极主动检测“内存泄漏” 严格遵循好的编程规则,可以让程序员在代码中尽量少的引入bug,但一旦不小心引入了,怎么办?这就要求我们在单元测试和集成测试中严格把关。 在这个阶段,单靠程序员或者测试员通过“代码走查”的方式检查内存泄漏,客户的实践和我的经验告诉我,这将是“不切实际”的,无论效率还是时间。
如果能够借助于一些专业的工具的话,情况可能就不一样了。 如果你的程序是用Visual C++ 6.0开发,那么Numega的BoundsChecker将是你检测“内存泄漏”最好的选择,如果是Visual C++.NET,可以试一下Compuware的DevPartner。
如果你的程序基于Unix或者Linux平台,使用C或者C++,可以考虑一下开源的工具valgrind,我的朋友跟我说,它在一定程度上比Rational的Purify更出色。 上面的工具都要求程序能够动态运行起来,而且测试用例需要你自己准备。
如果你正处于单元测试或集成测试阶段,程序代码量已经足够大,而且还不能够动态运行,要尽早检测代码中的“内存泄漏”问题,该怎么办?此时你可以试用一下目前最新的静态分析技术: *它不要求代码能够动态运行 *也不需要你来编写测试用例 *只需要代码能够正常编译,就可以发现代码只有在执行过程中才出现的错误,当然也包括内存泄漏。 这方面的工具有Klocwork的K7,Coverity的SQS,以及C++test中的BugDetective,其中最“物美价廉”的就是c++test的BugDetective。
2 如何发现客户端软件的“内存泄漏”? 如果开发过程中已经按照我上面提到的去做,相信发布后的程序存在“内存泄漏”的可能性几乎为零。 如果开发过程已经到了后期,系统测试已经开始做了,还要发现内存泄漏,这个时候我希望你能够拿到源代码。
如果有源代码,你还可以考虑1中的第二步,借助于专业的工具协助,虽然可能效果不一定特别理想,但总比下面我提到的方法更好一些。 当然作为测试人员,我当然也理解事情总没有想像那么完美。
我们通常会碰到“需要在系统测试阶段检测是否有内存泄漏,而且没有源代码”的难题。我曾经也遇到过。
记得那还是2002年的事情了。当时我承接的项目是一个电力行业的自动化系统,分为server端和client端,典型的c/s模式,老板要求在测试功能的同时顺便检查内存泄漏的问题,因为这个client端在客户那里可能是长时间不间断运行的,虽然客户很少操作。
我当时很为难,因为没有源代码,我甚至无法做“代码走查”。在做功能测试的同时,我一直在琢磨。
采用什么手段呢? 最后,借助于WinRunner,我出色的完成了任务,起码我的老板相信我的测试是可信的。
我的方法是这样的。 *首先咨询开发方,了解到关于内存操作频繁的功能点和模块 *从我的功能测试用例中挑选出和这些功能点和模块相关的测试用例 *找到一个“纯净”的机器,上面除了操作系统和被测的client端外,没有任何其他应用,这样做是为了排除其他应用可能存在的干扰。
*借助于WinRunner,自动化这些用例,形成自动化的脚本;在脚本的最后,添加“切换到Windows任务管理器”“记录该client进程所占用内存数据到文件”的操作脚本。 *连续运行N个小时 *最后我打开这个数据文件,可以发现在该客户端运行过程中,每次执行完特定的测试用例后,记录的内存占用数据。
当时我得出的结论是该client程序有“少许”的内存泄漏,因为在连续运行了72小时后,内存使用增加了近百分之十几。我会把这些数据。
转载请注明出处windows之家 » win10如何查内存泄漏