转自:
http://book.chinaunix.net/showart.php?id=6792
在解决内存泄漏问题之前,先来看看如何发觉哪些进程存在内存泄漏,也就是内存泄漏的测试方法。主要有两种测试方法:
(1)模仿用户长时间使用设备,经过一段时间后(例如:几天),查看进程内存的使用情况,对于那些内存大量增长的进程,可以初步怀疑其有内存泄漏。
为了排除进程可能确实需要那么多内存的影响,一般在把大部分测试用例运行一遍之后,这时该分配的内存都已经分配,记录各个进程的内存使用情况,作为检测各个进程是否存在内存泄漏的基点。
进行长时间的操作后,再来记录各个进程的内存使用情况,与前面记录的结果比较,进行分析。
这种测试的好处在于,更加贴近用户的实际情况,结果比较真实可靠,测试成本比较低。其问题在于,虽然发现了有内存泄漏,但并不知道是在哪个测试用例出现的内存泄漏,程序员不得不查看其整个代码来查找原因,这对程序员来讲无疑是个噩梦。
而且这种方法很可能会造成:程序员奉命检查内存泄漏,经过千辛万苦终于找到一个内存泄漏,满心欢喜地修改完成后交工了事。而实际上呢,代码中往往不止一个地点存在内存泄漏。就这样程序员改完之后再测,测完再改,极大地浪费了时间。
虽然这种方法有很多缺点,但鉴于测试成本比较低,不用刻意去操作,还是应该多多使用。毕竟如果你想把东西卖给别人,自己先要用着好用。
(2)针对某个具体的测试用例,检查是否有内存泄漏。这时测试人员需要对每一个测试用例反复操作,比较前后进程的内存使用,以检查是否存在内存泄漏,工作量很大,非常麻烦。
这种方法的好处在于:程序员能够很清楚哪几个操作存在内存泄漏,那么他就可以采用后面讲到的一些方法,去查找内存泄漏,而且也防止了程序员在查到一个内存泄漏之后兴奋不已,草草地交工了事。这样可以提高程序员查找、修复内存泄漏的效率。
缺点在于:成本高,对于一个测试用例,检查其是否存在内存泄漏要比验证其是否工作正常,在时间和精力上要多几倍,因此不能像前面的方法频繁使用。
如果称第一种方法为系统测试的话,那么这种方法就可以称为单元测试。
从修复内存泄漏的角度来讲,程序员更希望采用第二种方法进行测试,针对其测试成本高的问题,可以想一些方法来进行优化。
l 对于用户频繁使用的测试用例要作为重点,经常进行测试验证。如果这些测试用例哪怕出现一点内存泄漏,经过多次操作累积,内存泄漏的数量也是很大的;同理,对于那些不常使用的测试用例,测试的频率可以降低。
l 对于守护进程的测试用例要详细,内存泄漏主要就出现在守护进程中。
l 对于非守护进程,基本可以不测,因为这些进程一退出,内存都还给系统了,但这里有一个隐患:如果这些进程与守护进程存在通信的话,可能导致守护进程出现内存泄漏。
检测设备的内存泄漏是一个长期的过程,需要不断进行测试、修改,千万不要今天想起来了,就测试一下,改完之后,就认为问题都解决了。
分享到:
相关推荐
4. **内存泄漏检测库**:一些第三方库,如LeakSanitizer(部分集成于GCC和LLVM编译器),可以集成到项目中,为程序提供内存泄漏检测。这些库在运行时监控内存分配,当程序结束时报告未释放的内存。 5. **自定义内存...
JNI层内存泄漏检测工具是针对Android应用开发中的一个重要问题——JNI内存泄漏的解决方案。JNI,全称为Java Native Interface,允许Java代码与其他编程语言(如C++)交互,从而利用其性能优势。然而,由于Java和C/...
### Windows 下 C++ 内存泄露检测工具使用详解 在 Windows 平台下进行 C++ 开发时,内存管理是一项非常重要的任务。由于 C++ 语言本身的特性,开发者需要手动管理内存分配与释放,这就很容易导致内存泄露的问题。...
本文将详细介绍Lua内存泄露检测工具LuaMonitor,以及如何利用它来提升项目性能。 LuaMonitor是一款专门针对Lua环境设计的内存泄露检测工具。它提供了一个直观的视图分析界面,帮助开发者了解程序在运行过程中内存的...
"arm环境内存泄漏检测工具valgrind"就是这样一个针对ARM平台的专业工具,它能帮助我们识别并解决内存泄漏问题。 Valgrind是一个开源的动态分析工具集,主要用于调试、性能评估和内存错误检测。在ARM环境下,...
linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测
内存泄露检测工具 内存泄露是指计算机程序在运行过程中,无法释放已经分配的内存空间,从而导致内存泄露的现象。内存泄露检测工具是用于检测和解决内存泄露问题的软件工具。以下是常用的内存泄露检测工具: 1. ...
为了解决这个问题,开发者通常会使用专门的内存泄漏检测工具。本文将详细介绍两个用于Windows平台的内存泄漏排查工具:LeakDiag和LDGrapher。 **LeakDiag** LeakDiag是由微软开发的一款轻量级内存泄漏检测工具,...
标题中提到的"vc++内存泄漏检测工具",通常指的是用于检测Visual C++编译的程序中内存泄漏的工具。这类工具可以帮助开发者定位和修复内存管理错误,确保程序的健壮性和稳定性。在C++环境中,内存泄漏检测通常通过...
"Linux 内存泄露检测工具" Linux 内存泄露检测是指在 Linux 环境下检测程序内存泄露的过程。内存泄露是指程序在申请内存后没有释放,导致内存的浪费和系统性能下降。检测内存泄露可以使用 Valgrind 工具,它可以...
1. 在测试环境中运行:为了获得准确的内存泄露报告,应在尽可能接近生产环境的测试环境中运行程序。 2. 清理全局变量:确保程序开始前和结束后,全局变量中的内存已被正确清理。 3. 处理假阳性:尽管这些工具通常很...
JS内存泄漏检测工具:IEJSLeaksDetector
"Virtual Leak Detector"是一款针对C++的内存泄漏检测工具,它被设计用来帮助开发者定位并修复程序中的内存泄漏问题。这款工具通过对程序运行时的内存分配和释放进行跟踪,能够准确报告那些未被释放的内存块。通过...
此外,标签中提到的“测试 Delphi覆盖率工具”可能是指除了内存泄漏检测之外,Delphi开发者还可以使用其他工具来评估代码的测试覆盖率。覆盖率工具可以帮助开发者了解代码有多少部分在测试过程中被执行,以确保测试...
用于freertos嵌入式实时系统内存泄漏检测,可以实时查看内存状况,具体平台是ESP32
3. **监测和报告**:程序运行期间,BoundsChecker会记录内存分配和释放操作,当检测到可能的内存泄露时,它会提供详细的错误报告,包括内存泄漏的堆栈跟踪信息,帮助定位问题所在。 4. **修复问题**:根据Bounds...
为了解决这个问题,开发人员需要借助特定的工具来检测和定位内存泄露,其中“VisualLeakDetector”就是这样一款高效实用的工具。 Visual Leak Detector(VLD)是一款专门为Microsoft Visual C++编译器设计的内存...
### 有效的C++内存泄露检测方法 #### 摘要 本文提出了一种针对C++程序的高效内存泄漏检测方法。该方法通过深入分析内存泄漏现象,并重新实现了动态内存分配和释放函数,能够准确记录每次内存分配的具体位置,并对...
FastMM是针对Delphi开发环境的一个高效、强大的内存管理及内存泄漏检测工具,它被誉为Delphi下最佳的内存管理库之一。FastMM以其卓越的性能和详细的内存泄漏报告而受到广大开发者的好评。在本文中,我们将深入探讨...