使用Application Verifier AppVerifier 检查资源泄漏

本文介绍了如何使用Application Verifier工具来检测Windows CE和Windows Mobile应用程序的内存和句柄泄漏。该工具能够记录分配和释放资源的API调用,并在程序退出时报告未释放的资源,提供调用栈信息。通过详细步骤,展示了在Windows CE和Windows Mobile环境下设置和使用AppVerifier的过程。
摘要由CSDN通过智能技术生成
               

原文地址http://blog.csdn.net/xdkui/archive/2008/12/19/3560143.aspx

(感谢作者,这篇文章太有用了)

最近在论坛里看到很多人问怎样检查内存泄漏,对于Windows CE/Windows Mobile开发,微软已经为我们提供了很好的工具Application VerifierAppVerifier是一个辅助开发工具,不用修改代码,可以检测出程序内存,句柄, GDI对象泄漏,并报告分配泄漏对象的调用栈,有过在大规模代码里查资源泄漏的兄弟应该知道这个调用栈的价值。

 

在中文google里搜了下,没有发现讲这个工具使用的文章,我就写个简单的使用说明,让大家知道并利用好这个工具吧。在MSDN里有很多关于AppVerifier的资料,有兴趣可以直接去http://msdn.microsoft.com搜。后面我附上几个不错的链接。注意:

1.       AppVerifier的原理是hook分配和释放资源的API,在程序调用这些API时记录信息,在程序退出时报告出未释放的资源。

2.       只能检测Native代码。

3.       程序正常退出才行,强行杀进程不能得到正确的报告。

4.       基于原理,只能做Run-time检测。尽量使用程序的所有功能已保证检测到更多代码。

 

测试代码

void LeakMemory()

{

    BYTE* p = new BYTE[10];

    NKDbgPrintfW(L"Allocated memory: 0x%X", p);

}

 

void LeakHandle()

{

    HANDLE h = CreateEvent(NULL, FALSE, FALSE, L"leaked_event");

    NKDbgPrintfW(L"Created event: 0x%X", h);

}

 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

    LeakMemory();

    LeakHandle();

    return 0;

}

很简单,泄漏一点内存和一个Event句柄。编译该代码生成Leak.exe/Leak.pdb/Leak.mapAppVerifier使用MAP文件查找调用栈的函数符号。下面我会分别说在Windows CEWindows Mobile下的使用。

Windows CE

我是基于Windows CE 6测试的。PB6已经集成到Vistual Studio里了。

1.       PB自带了AppVerifier, 拷贝D:/Program Files/Microsoft Platform Builder/6.00/cepb/wcetk/ddtk/armv4i目录下的下面这些与AppVerifier相关的文件到Release或者设备的/Windows目录。

        appverif.exe

        htracker.dll

        shimexp.exe

        shim_heap.dll

        shim_hleak.dll

        shim_usergdi.dll

        shim_verifier.dll

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值