使用C或者C++编程的时候,最担心的应该还是内存泄漏问题,测试人员通常专注于功能/性能测试,如果有不明显的内存泄漏,可能要在程序发布后几天,甚至更久才会发现故障。因此,检查C/C++程序的内存泄漏,开发人员需要自己把好这个关。
检测内存泄漏的工具有很多,大致分为二种,一种是嵌入程序的,需要修改源码;一种是attach到进程,实时监测的。
LeakDiag是微软的一款内存泄漏检测工具,免费的,不需要和待检测的源程序一起编译,在使用上较为方便,能够统计一段时间内的内存泄漏大小以及指出发生内存泄漏的源代码的行数。
首先先去微软网站下载一个LeakDiag ,安装时候需要注意:务必按照默认路径安装,否则可能出问题。
试试用法,
首先准备一个有bug的程序,如下,工程的名称就叫LEAK,代码敲完,VC下编译运行。
#include "stdio.h"
#include "malloc.h"
#include "windows.h"
void
main(
void
)
{
int
i;
char
*p;
for
(i=0; i<1000; ++i)
{
p = (
char
*)
malloc
(
sizeof
(
char
)*5);
Sleep(2000);
printf
(
"i=[%d]\n"
,i);
}
}
|
使用malloc来分配内存,但没有free掉,运行以后,打开LeakDiag,如下:
选择进程列表中的LEAK.EXE,由于malloc分配的内存在堆上,我们点击Windows Heap Allocator,再点Start按钮,就开始跟踪堆上的内存分配了。
运行一会,按Log按钮,就会在安装根目录下的Logs文件夹下生成Log文件,XML结构的,用IE,打开后,我们关注的是节点内的内容,如下:
<
LEAKS
ver
=
"1.25.28.2201"
>
<
STACK
numallocs
=
"015"
size
=
"048"
totalsize
=
"0720"
>
<
STACKSTATS
>
<
SIZESTAT
size
=
"048"
numallocs
=
"015"
/>
<
HEAPSTAT
handle
=
"570000"
numallocs
=
"015"
/>
</
STACKSTATS
>
<
FRAME
num
=
"0"
dll
=
"LEAK.exe"
function
=
""
filename
=
""
line
=
""
addr
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
|