arlenexhl 发表于 2007-8-6 13:44:27

关于内存泄漏测试

VU目前版本没有专门的测试内存泄漏的功能,但可以方便地利用IDE的相应功能测试内存泄漏。
这里以VC6.0为例,要测试内存泄漏,则以调试方式执行测试工程,然后查看VC的输出窗口(Debug页),出现类似以下的信息时表示测试时产生了内存泄漏:
xxx.cpp(368) : {561} normal block at 0x00B11178, 5 bytes long.
Data: <date > 64 61 74 65 00

一般来说,点击这些信息,就可以定位到申请这些内存的代码。

内存泄漏有可能是测试代码造成的,如果测试用例的输入部分动态在堆上申请了内存,则要在输出部分用后置操作代码释放内存,如:
输入部分:
char* pArg = new char
输出部分要添加如下代码释放内存(被测试代码会自动删除相应指针的除外):
delete [] pArg; //!
注意后置操作的语法:;不能省略,后面加//!,否则VU会作为预期输出处理。

为了实现调试中的后退功能,当以调试方式运行测试工程时,会重复执行多次,所以需要较多时间,并且,如果有内存泄漏,所输出的泄漏信息比实际的多得多。

调试的重复执行次数由VU目录/include/VuxOptions.h文件定义,如下:
#define MAX_DEBUG_TIMES 100
如有需要,可以自行修改。

函数测试、类测试、工程测试都可以检查是否有内存泄漏,因此可以先用工程测试进行总体检查,再对怀疑对象执行类测试或函数测试。如果难于确定产生泄漏的代码,可以使用“二分法”较快速地找到产生泄漏的类及函数:
1) 选择“工程测试”;
2) 打开“选定测试集”窗口(控制窗口->菜单->选定测试集);
3) 选中一半的类,点击“确定”;
4) 以调试方式执行测试工程,这样就可以判断产生内存泄漏的代码是否位于选中的类;
重复2)3)4)直到找到产生内存泄漏的类;
用同样的方法找到产生内存泄漏的函数。

zxyu1982 发表于 2007-8-12 00:34:29

ding

nancofung 发表于 2007-8-15 18:01:00

HUHU,我看不明白,没有做过内存测试.

zengfanjin5588 发表于 2007-8-19 15:14:57

高难度,搞不明白sdlkfj2

zrx16 发表于 2007-8-19 23:10:34

看不懂
页: [1]
查看完整版本: 关于内存泄漏测试