win10怎么检测内存泄漏
1.如何检查C中的内存泄漏
如何检查C 中的内存泄漏 内存泄漏是编程中常常见到的一个问题,我所遇过的原因有两个:1。
分配完内存后忘记回收2。代码有问题,造成想回收却无法回收,例如:int* p=new int;p=new int; //p指针修改,原来申请内存的地址没有记录下来,于是无法释放 下面介绍如何检查内存泄漏:1。
包含头文件和定义#define _CRTDBG_MAP_ALLOC //并非绝对需要该语句,但如果有该语句,打印出来的是文件名和行数等更加直观的信息#include #include (1)#include语句必须采用上文所示顺序。 如果更改了顺序,所使用的函数可能无法正确工作(2)如果有cpp文件无法看到这三行,以下函数就无效了,于是应该把这三行放到一个头文件里,确保每个cpp文件会调用到它2。
方法一:使用_CrtDumpMemoryLeaks()int main(int argc , char* argv[]){ {new int;} _CrtDumpMemoryLeaks(); return 0;}output:Detected memory leaks!Dumping objects ->{49} normal block at 0x00384DA8, 4 bytes long。 Data: CD CD CD CD Object dump complete。
其内容包括:内存分配型号(在大括号内)、块类型(普通、客户端或 CRT)、十六进制形式的内存位置、以字节为单位的块大小、以字节为单位的块大小、前 16 字节的内容(十六进制)注意:(1)大括号的位置,如果不加{new int;},这块内存是等到main函数结束才泄漏的,而_CrtDumpMemoryLeaks()是在main函数里调用的,于是判断内存泄漏class A{public: int* Data; A() { Data=new int; } ~A() { delete Data; }};int main(int argc , char* argv[]){ A Test; _CrtDumpMemoryLeaks(); return 0;}output:Detected memory leaks!Dumping objects ->{49} normal block at 0x00384DA8, 4 bytes long。 Data: CD CD CD CD Object dump complete。
(2)对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待A Test;int main(int argc , char* argv[]){ _CrtDumpMemoryLeaks(); return 0;}output:Dumping objects ->{49} normal block at 0x00384DA8, 4 bytes long。 Data: CD CD CD CD Object dump complete。
2。方法二:在程序入口写几个语句,程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag( tmpFlag );3。
方法三:使用_CrtMemCheckpoint(),可以查出某程序段的内存泄漏情况int main(int argc , char* argv[]){ CrtMemState s1, s2, s3; _CrtMemCheckpoint( &s1 ); new int; //程序段 _CrtMemCheckpoint( &s2 ); if ( _CrtMemDifference( &s3, &s1, &s2) ) _CrtMemDumpStatistics( &s3 ); return 0;}output: bytes in 0 Free Blocks。 4 bytes in 1 Normal Blocks。
0 bytes in 0 CRT Blocks。0 bytes in 0 Ignore Blocks。
0 bytes in 0 Client Blocks。 Largest number used: 0 bytes。
Total allocations: 4 bytes。
2.内存卡检测工具怎么用?
SDFormater内存卡检测工具 Panasonic?SDFormatter是一个由松下出品的可以将内存卡格式化的工具,可以支持很多品牌的SD卡、存储卡。
将其通过USB读卡器使内存卡格式化之后,可以检测内存卡的容量以及修复大部分遗失数据,并且恢复之前不能使用或者不能正确的识别的内存卡。 这个检测工具是严格遵照SD内存卡的存储规格来格式化的,并提供对SD内存卡更容易和更快的操作方式。
使用此检测工具就需要将内存卡的格式与其对应,才能正确的检测出内存卡的问题。 MyDiskTest检测工具 MyDiskTest是SD内存卡、U盘和手机TF卡等的专用检测工具,这个检测工具主要针对内存卡的存储容量还有对内存卡的扩容检测、读写速度测试和文件对比测试。
在官方网站和正确途径下载下来之后,要将其与内存卡关联起来,然后点击确定,就可以进行检测。 chipgenius芯片精灵(USB检测工具) 这项检测工具主要是针对USB的,这是一个外用的检测工具,小巧方便,插入接口便能使用,是一个绿色软件。
主要功能是可以自动的去查询读卡器、MP3/MP4、U盘、移动硬盘等。 chipgenius芯片精灵不同于其他检测工具的是它的方便和小巧,可以随时查询usb设备的信息、接口速度、序列号等等,是电子消费者、发烧友、数码消费者的最爱。
当然,这里有一个小提示,就是如果内存卡出现故障时,先不要着急,可以先尝试使用橡皮擦或者细腻的纸巾去擦拭内存卡金手指部位,就像电池没电了用牙齿咬一下又可以用一样。 在急迫的时候,这个小方法可能会派上用场。
3.系统测试中怎么确定内存泄露
是不是说没有一种内存检查工具能够在linux使用呢,也不是,像valgrind工具还是相当不错的。
他的下载地址是下载一个valgrind3.2.3(tar.bz2)工具,按照里面的README提示,安装后就可以使用这个工具来检测内存泄露和内存越界等。这是一个没有界面的内存检测工具,安装后,输入valgrindls-l验证一下该工具是否工作正常(这是README里面的方法,实际上是验证一下对ls-l命令的内存检测),如果你看到一堆的信息说明你的工具可以使用了。
在编译你的程序时,请设置-g参数,编译出后使用如下的命令来判断你的程序存在内存泄露:valgrind--tools=memcheck--leak-check=fullyourProg在输出信息中就会看到你的内存问题了。
4.C语言中的内存泄露 怎样避免与检测
常见的内存错误及其对策如下:1、内存分配未成功,却使用了它 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。
常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数 的入口处用assert(p!=NULL)进行检查。
如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。2、内存分配虽然成功,但是尚未初始化就引用它 犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。
内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零 值也不可省略,不要嫌麻烦。
3、内存分配成功并且已经初始化,但操作越过了内存的边界 例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。
4、忘记了释放内存,造成内存泄露 含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。
终有一次程序突然死掉,系统出现提示:内存耗尽。未初始化的内存 在本例中,p 已被分配了 10 个字节。
这 10 个字节可能包含垃圾数据。char *p = malloc ( 10 ); 如果在对这个 p 赋值前,某个代码段尝试访问它,则可能会获得垃圾值,您的程序可能具有不可预测的行为。
p 可能具有您的程序从未曾预料到的值。良好的实践是始终结合使用 memset 和 malloc,或者使用 calloc。
char *p = malloc (10); memset(p,'\0',10); 现在,即使同一个代码段尝试在对 p 赋值前访问它,该代码段也能正确处理 Null 值(在理想情况下应具有的值),然后将具有正确的行为。内存覆盖 由于 p 已被分配了 10 个字节,如果某个代码片段尝试向 p 写入一个 11 字节的值,则该操作将在不告诉您的情况下自动从其他某个位置“吃掉”一个字节。
让我们假设指针 q 表示该内存。结果,指针 q 将具有从未预料到的内容。
即使您的模块编码得足够好,也可能由于某个共存模块执行某些内存操作而具有不正确的行为。下面的示例代码片段也可以说明这种场景。
char *name = (char *) malloc(11); // Assign some value to name memcpy ( p,name,11); // Problem begins here 在本例中,memcpy 操作尝试将 11 个字节写到 p,而后者仅被分配了 10 个字节。作为良好的实践,每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对。
一般情况下,memcpy 函数将是用于此目的的检查点。内存读取越界 内存读取越界 (overread) 是指所读取的字节数多于它们应有的字节数。
这个问题并不太严重,在此就不再详述了。下面的代码提供了一个示例。
char *ptr = (char *)malloc(10); char name[20] ; memcpy ( name,ptr,20); // Problem begins here 在本例中,memcpy 操作尝试从 ptr 读取 20 个字节,但是后者仅被分配了 10 个字节。这还会导致不希望的输出。
内存泄漏 内存泄漏可能真正令人讨厌。下面的列表描述了一些导致内存泄漏的场景。
重新赋值 我将使用一个示例来说明重新赋值问题。char *memoryArea = malloc(10); char *newArea = malloc(10); memoryArea 和 newArea 分别被分配了 10 个字节,它们各自的内容如图 4 所示。
如果某人执行如下所示的语句(指针重新赋值)…… memoryArea = newArea; 则它肯定会在该模块开发的后续阶段给您带来麻烦。在上面的代码语句中,开发人员将 memoryArea 指针赋值给 newArea 指针。
结果,memoryArea 以前所指向的内存位置变成了孤立的。它无法释放,因为没有指向该位置的引用。
这会导致 10 个字节的内存泄漏。要避免内存相关的问题,良好的实践是:始终结合使用 memset 和 malloc,或始终使用 calloc。
每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对。在对指针赋值前,要确保没有内存位置会变为孤立的。
每当释放结构化的元素(而该元素又包含指向动态分配的内存位置的指针)时,都应首先遍历子内存位置并从那里开始释放,然后再遍历回父节点。始终正确处理返回动态分配的内存引用的函数返回值。
每个 malloc 都要有一个对应的 free。确保您不是在访问空指针。
5.win10怎么查电脑内存型号
方法一:使用第三方软件查看下载测试软件检测查看(CPU-Z、Windows优化大师、鲁大师)。
方法二:1G表示:该内存条的大小。DDR2表示:内存条是几代的。
图中的是2代的内存条。667表示:表示内存条的频率。
方法三:1、在桌面中可以有显示回收站图标,可以通过该途径,找到“我的电脑”(win10系统升级默认叫做“此电脑”)。2、双击“回收站”,在左侧列表中可以看见“快速访问”、“此电脑”、“网络”以及家庭组等。
3、右键鼠标点击“此电脑”,弹出下拉菜单中,左键点击属性。4、就会弹出“查看有关计算机的基本信息”面板了,在下面可以找到系统列表中的“安装内存(RAM)”的属性值了。
当然也有其他的一些属性。方法四1、第二种查看电脑内存的快速方法,鼠标右键任务栏,点击,弹出菜单栏。
2、点击菜单栏中的“任务管理器(K)”,弹出“任务管理器”信息面板。3、点击面板上面的“性能”,在下面性能栏里面可以查看到内存属性,内存大小以及所使用的情况。
4、打开任务管理器的另一种快捷方法是,鼠标右键左下角的WIN10徽标,弹出菜单,点击菜单中的“任务管理器(T)”就可以。
win10如何查内存泄漏
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小时后,内存使用增加了近百分之十几。我会把这些数据。
怎么检查win10内存泄漏
1.win10内存泄漏
引起内存泄漏可能是由于一些软件进程,或者是驱动程序。所以没有必要一定重装系统.
排查方法:
1,打开任务管理器,切换到“详细信息”选项卡
2,在进程列表顶部的表头(即“名称”、“pid”、“状态”等这一行字)上点击右键,选择“选择列”
3,选中“工作集(内存)”和“工作集增量(内存)”这两项
4,随后进程列表中会显示这两个新增的参数
5,在列表顶部的表头处点击新添加的这两列的名称,按照对应数值的大小进行降序排列
6,看看这两项降序排列后,排名靠前的分别是什么进程。
检测到什么进程后,再尝试关闭这些进程,或找到进程对应的程序解决。
驱动问题尝试更新所有驱动程序,包括网卡驱动。看内存泄漏问题是否解决。
2.平板win10系统内存泄漏,怎么定位内存泄漏的程序
如果能够打开任务管理器,可以先看看进程选项卡里面的进程
在查看→选择列 中选择内存专用工作集 工作集两个
然后按从大到小排序
观察那些不断增长的进程,记录下名字
并干掉它们
再观察是否仍然继续增长
如果没有,尝试卸载那些程序(可以在没有杀死进程之前,右键,打开程序位置,找到程序源头)
另外不排除有一些是由服务导致的
记录正在运行的服务,尝试关闭那些可疑的服务
观察内存使用量
找到可疑服务后,禁用服务,然后重启,看看会不会解决问题
3.windows 怎么检查内存泄漏
Windows 内存诊断程序可以诊断内存泄漏,它会测试计算机随机存取内存(RAM)是否存在错误,包括一组综合性的内存测试。
Windows 内存诊断程序容易使用并且速度快,如果运行 Windows 遇到了问题,可以使用此诊断程序查清问题是否由损坏的硬件所导致的。 还有一个很简单的办法来检查一个程序是否有内存泄漏。
就是是用Windows的任务管理器(Task Manager)。运行程序,然后在任务管理器里面查看 “内存使用”和”虚拟内存大小”两项,当程序请求了它所需要的内存之后,如果虚拟内存还是持续的增长的话,就说明了这个程序有内存泄漏问题。
当然如果内存泄漏的数目非常的小,用这种方法可能要过很长时间才能看的出来。
4.win10系统怎样查看电脑的内存
方法一:
1、右键点击桌面上的“这台电脑”图标,弹出的菜单中选择“属性”。
2、在界面即可看到你的电脑的CPU、型号、频率等信息,以及内存大小,还可以查看你的win10是64位还是32位的。
方法二:
在桌面用快捷键Win+R打开运行命令窗口,输入“dxdiag”,点“确定”或回车,打开Directx诊断工具窗口,可以查看处理器、内存、显卡、声卡等信息。
方法三:
从网下载鲁大师,安装后,打开鲁大师-点击“硬件检测”,点击其下左“电脑概览”,在右边可以看到这台电脑硬件配置,分别打开其下的处理器、主板、内存、硬盘、显卡、显示器、声卡、网卡等,可以看到这些硬件的详细信息。
5.如何检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。
内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。可以使用相应的软件测试工具对软件进行检测。
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系列的一个插件。
转载请注明出处windows之家 » win10内存泄漏
windows之家













