Application Verifier 工具及指南

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这个工具的作用是用于判断一个wince的AP及其组件对内存堆的分配释放,对句柄的创建销毁进行检查,对AP退出后没有释放的内存堆和句柄log出来,帮助开发者分析问题解决问题。
当然对驱动它也可以搞定,我本人还木搞懂,所以先捂着还没热的一点经验,给大家一些引导,一是让大家知道有这么个东西(昨天我还不知道有这么个东西呢,嘿嘿),而是让大家知道怎么能最快用起这个东西,三是让大家知道怎么它的log。

 

1.先把设备端的目录拷贝到设备上执行,看到下面的对话框,呵呵,你的屏幕一定要够大才行哦。

勾上要执行的hook,然后点击add来添加需要检查的exe,如图。
2.从对话框里面选择要添加的exe

3.新exe会出现在list列表,选择后点击run,如图。

点击run后你的exe就运行起来了,模拟运行一段时间后关闭你的exe,记住一定要正常关闭,不能kill掉。
这个时候会在根目录生成一个Appverifier_XXX.log的文件,这就是输出的结果。
这个log文件你可以直接看,也可以用一个更加一目了然的工具来看。
就是1楼我提供的PC端的viewer,你只需要把这个log拷贝到pc上即可。
你的exe及其它调用的dll最好有编译的时候生成的map文件,如果有map档,viewer会帮会给你提供一个很重要的功能:从地址解析symbols,所以会告诉你具体哪个函数在做坏事。

 

现在教你怎么看log。
我们先打比方我们的exe里面做了下面的坏事:

  1. 测试代码
  2. void LeakMemory()
  3. {
  4.     BYTE* p = new BYTE[10];
  5.     NKDbgPrintfW(L"Allocated memory: 0x%X", p);
  6. }
  7. void LeakHandle()
  8. {
  9.     HANDLE h = CreateEvent(NULL, FALSE, FALSE, L"leaked_event");
  10.     NKDbgPrintfW(L"Created event: 0x%X", h);
  11. }
  12. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  13. {
  14.     LeakMemory();
  15.     LeakHandle();
  16.     return 0;
  17. }

那么会得到类似下面的log
1532862 PID:206001e TID:207001e Allocated memory: 0x2C022DD0 //这两行是程序输出的
1532878 PID:206001e TID:207001e Created event: 0x521603
1532985 PID:206001e TID:207001e Application verifier core unloaded from: leak.exe - 11:39:44 PM
1533001 PID:206001e TID:207001e DLL_PROCESS_DETACH: Shim_heap checking for abandoned heaps/allocations...
1533094 PID:206001e TID:207001e Heap statistics for heap 0x2c020010:
1533108 PID:206001e TID:207001e    Initial size: 0, Maximum size: 0
1533122 PID:206001e TID:207001e    Current bytes: 10, Max: 10
1533136 PID:206001e TID:207001e    Current count: 1, Max: 1
1533150 PID:206001e TID:207001e    Free list bytes: 0
1533164 PID:206001e TID:207001e    Free list size: 0
1533183 PID:206001e TID:207001e Checking for un-freed items in heap 0x2c020010...
1533244 PID:206001e TID:207001e ----------------------------------------
1533260 PID:206001e TID:207001e TrackedItem count: 1
1533273 PID:206001e TID:207001e Callstack:
1533368 PID:206001e TID:207001e Console NOT redirected for process 0x206001E
1533506 PID:400002 TID:207001e RELFSD: Opening file shim_heap.map from desktop
1535138 PID:206001e TID:207001e    0x41e98310: shim_heap.dll!APIHook_HeapAlloc + 5d0h
1535220 PID:206001e TID:207001e    0x41e9b378: shim_heap.dll!APIHook_LocalAlloc + a8h
1535303 PID:206001e TID:207001e    0x41e9c2f4: shim_heap.dll!APIHook_malloc + 18h
1535392 PID:206001e TID:207001e    0x41e9c54c: shim_heap.dll!APIHook_new + 14h
1535596 PID:400002 TID:207001e RELFSD: Opening file leak.map from desktop
1535746 PID:206001e TID:207001e    0x000110e0: leak.exe!?LeakMemory@@YAXXZ + ch //这是内存泄漏的调用栈
1535892 PID:206001e TID:207001e    0x0001116c: leak.exe!WinMain + 10h
1536088 PID:206001e TID:207001e    0x00011208: leak.exe!WinMainCRTStartupHelper + 28h
1536210 PID:206001e TID:207001e    0x000111cc: leak.exe!WinMainCRTStartup + 20h
1536341 PID:400002 TID:207001e RELFSD: Opening file coredll.map from desktop
1546679 PID:206001e TID:207001e    0x40071f5c: coredll.dll!MainThreadBaseFunc + 2a0h
1546768 PID:206001e TID:207001e Un-freed items:
1546854 PID:206001e TID:207001e    0x2c022dd0      10 bytes, process: 0x0206001e, thread://泄漏的内存地址和大小,可以看出和程序里的一致0x0207001e, PerfCount: 1021127120
1546941 PID:206001e TID:207001e       Total: 10 bytes
1547026 PID:206001e TID:207001e Checking for leaks in marshall helper api's...
1547043 PID:206001e TID:207001e ------------------------------------------------------------------------
1547045 PID:206001e TID:207001e Shim HLeak detaching from process /Release/leak.exe
1547046 PID:206001e TID:207001e Num of un-freed handles = 1
1547046 PID:206001e TID:207001e Check log file for details
1547046 PID:206001e TID:207001e ------------------------------------------------------------------------
1547047 PID:206001e TID:207001e ----------------------
1547256 PID:206001e TID:207001e EVENT Handle = 0x00521603 Name: 'leaked_event' PerfCount: 1021895588 //泄漏的句柄,可以看出何程序里是一样的1547338 PID:206001e TID:207001e Callstack:
1547430 PID:400002 TID:207001e RELFSD: Opening file shim_hleak.map from desktop
1548302 PID:206001e TID:207001e    0x41e84814: shim_hleak.dll!My_TrackerInsertItem2 + e0h
1548409 PID:206001e TID:207001e    0x41e84710: shim_hleak.dll!My_TrackerInsertItem + 24h
1548486 PID:206001e TID:207001e    0x41e84c00: shim_hleak.dll!APIHook_CreateEventW + 68h
1548653 PID:206001e TID:207001e    0x0001112c: leak.exe!?LeakHandle@@YAXXZ + 18h //泄漏句柄的调用栈1548819 PID:206001e TID:207001e    0x00011170: leak.exe!WinMain + 14h
1548979 PID:206001e TID:207001e    0x00011208: leak.exe!WinMainCRTStartupHelper + 28h
1549136 PID:206001e TID:207001e    0x000111cc: leak.exe!WinMainCRTStartup + 20h
1549219 PID:206001e TID:207001e    0x40071f5c: coredll.dll!MainThreadBaseFunc + 2a0h

1549240 PID:206001e TID:207001e DLL_PROCESS_DETACH: Shim_usergdi checking for abandoned resources...
1549340 PID:206001e TID:207001e --------------------------------------------------------------------------------
1549355 PID:206001e TID:207001e VLOG exiting - check for verifier logs (22 info, 5 warnings, 0 errors)
1549368 PID:206001e TID:207001e    Process log: /release/AppVerifier_leak_2339.log //这是日志文件,文本格式,可以直接打开看
1549381 PID:206001e TID:207001e --------------------------------------------------------------------------------

粗体字部分就是log里面告诉我们有内存或句柄问题的位置。定位粗体部分的位置很简单,就是看每个callstack的shim_xxx.dll开头尾随的第一句话。

如果用viewer看,会清晰一些,下图是随便抓的一个sample:
 
heap的创建位置就是红线所画,但是它一直没有被释放直到程序退出。

别再只会用WinDbg了!试试微软官方的Application Verifier,内存泄漏和双重释放一抓一个准 本文介绍了微软官方调试工具Application Verifier在内存问题排查中的实战应用。相比传统WinDbg,Application Verifier能主动检测内存泄漏、双重释放等常见问题,提供精确诊断。文章包含安装配置指南、实战案例及高级技巧,帮助开发者高效定位和解决内存相关bug。 阅读详情

相关推荐

实战指南:利用Application Verifier与WinDbg精准捕获Windows应用内存泄漏与堆损坏

本文详细介绍了如何利用Application Verifier与WinDbg工具精准检测Windows应用中的内存泄漏与堆损坏问题。通过实战案例和配置指南,帮助开发者快速定位和解决隐蔽的内存错误,提升应用稳定性与性能。

weixin_42549723的博客 415

Application Verifier

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

Windows 堆损坏排查实战:从 0xC0000374 错误码到 Application Verifier 的 5 步定位法

本文详细介绍了Windows平台上堆损坏问题的排查方法,特别是针对0xC0000374错误码的5步定位法。通过使用Application Verifier工具,开发者可以高效诊断和修复内存越界访问、重复释放等常见堆损坏问题,提升应用程序稳定性。

weixin_32822843的博客 366

Application Verifier PC端工具

Application Verifier PC端工具包,可用于连接wince5.0的内存泄漏检测工具

Wince内存泄露检测工具Application Verifier的使用和如何快速定位泄露语句(一)

大家在wince开发过程会发现跟PC上的开发的差距很大,一些在PC上的调试技巧之类的辅助功能都无法使用,比如内存泄露的检测等,那么这篇文章就是告诉大家如何使用wince上的内存检测工具帮助大家找出内存泄露。这里给大家介绍的软件为Application Verifier,是微软自己开发用于监测wince系统的内存和一些内核对象未释放造成内存泄露的辅助工具。该工具只需要在wince上运行指定监控的程序

flyound的专栏 3784

别再硬啃WinDbg了!试试微软官方的Application Verifier,内存泄漏和双重释放一抓一个准

本文介绍了微软官方调试工具Application Verifier如何高效检测内存泄漏和双重释放问题,相比WinDbg更易用且精准。通过实时API钩子技术和页堆机制,它能将模糊的内存错误转化为明确诊断信息,大幅提升调试效率。文章详细解析了其核心功能、配置方法及与Visual Studio的协同工作技巧,帮助开发者快速定位顽固内存问题。

weixin_30588675的博客 191

调试工具:应用程序验证器Application Verifier一页纸(appverif+WinDbg+gflags)- 详细版

当一个Release版本软件出现bug时,可以使用操作系统提供的验证机制;校验机制中有2个常用工具:应用程序验证器()是windows本地代码的分析工具,依赖于操作系统的支持来捕获常见的系统API误使用,工具可以自动捕获很多难以重现的代码错误;是一个设置应用验证机制参数的工具工具主要包括2个部分:实现在等dll中的开头的函数和一个设置工具()应用程序验证器()本质上就是一个工具,下面通过问答和一个示例来讲解下面通过问答的形式说明工具的一些使用疑惑(主要是第一次使用会有),其实多操作几次自然就记住了什么情况下

可乐松子的博客 7039

Application Verifier使用起步

网上Application Verifier(以下称AppVer)关于的功能介绍已经很多,却鲜有介绍实际使用的文章(说真的,我很怀疑这些作者有没有用AppVeri测过程序),谨以此文总结我在使用过程中遇到的问题和解决方法。

lixiangminghate的专栏 1万+

Application Verifier实战:Windows应用深度调试工具详解

Application Verifier是微软官方提供的一款系统级调试工具,专为Windows平台上的应用程序开发者设计。它能够在应用程序运行过程中实时检测并报告潜在的编程错误,包括内存泄漏、异常处理失败、线程同步问题等关键缺陷。该工具通过注入目标进程并监控其行为,帮助开发者在开发和测试阶段提前发现稳定性隐患,从而提升软件质量。对于具有5年以上开发经验的工程师而言,掌握Application Verifier的使用不仅能提高调试效率,还能深入理解Windows底层机制与应用行为之间的关系。

weixin_35294091的博客 1372

全面掌握Application Verifier的自动除错技术

Application Verifier 是一款由微软开发的用于测试和验证Windows应用程序的工具。它可以帮助开发者发现应用程序在运行时的潜在错误,尤其在内存管理、线程同步和资源管理等方面。通过使用 Application Verifier,开发者能够提前发现问题,提高软件的稳定性和可靠性。内存泄露的定义很简单:当程序在申请内存后,未能在不再需要时将其返回给系统,从而导致可用内存逐渐减少。在某些情况下,内存泄露可能是由编程错误导致的,如指针失效、资源未释放等;

weixin_42113456的博客 1537

使用Application Verifier AppVerifier 检查资源泄漏

使用Application Verifier AppVerifier 检查资源泄漏

qq_44884287的博客 749

Application Verifier的使用

<br />1.打开Application Verifier ,方法一:在PB菜单Tools->Application Verifier;方法二:打开CETK,连接设备,左键设备,菜单Tools->Application Verifier;<br />2.在Application Verifier窗口,点击"Add"按钮<br />3.选择要测试的程序<br />4.点击"Run"按钮或者直接运行要测试的程序<br />5.尽量使用要测试的程序<br />6.点击"Get Logs"按钮,从目标机子复制l

JXES智能生态系统 7412

从Valgrind到Application Verifier:给Windows C++开发者的内存调试“平替”指南

本文为Windows C++开发者提供从Valgrind迁移到Application Verifier的实战指南,详细解析Application Verifier的核心能力、配置流程及高级内存问题检测技巧。通过对比Valgrind与AppVerif的差异,帮助开发者高效定位内存泄漏、堆损坏等问题,并深度集成WinDbg进行调试优化。

weixin_30700977的博客 326

关于Application Verifier 0day的相关说明

关于Application Verifier 0day的相关说明新闻报道

u010664634的博客 637

Debugging Heap corruption with Application Verifier and Debugdiag

When dynamic allocation/deallocation of memory is not handled properly by user code, this might lead to memory blocks in the heap being corrupted. There are many causes of heap corruption. Some of the

chao 749

Application Verifier:Windows C/C++程序内存泄漏与堆损坏检测实战指南

在C/C++开发中,内存泄漏和堆损坏是导致程序崩溃、性能下降的常见根源性问题。其原理在于程序运行时动态分配的内存未能正确释放,或访问越界破坏了内存结构。这类缺陷在测试阶段可能潜伏,却在生产环境引发严重故障。通过运行时验证工具对内存管理、资源句柄和API调用进行严格监控,能有效提升软件的稳定性和健壮性。Application Verifier正是Windows平台上一款强大的运行时验证工具,它通过注入检查、模拟低资源场景等方式,主动暴露深层次缺陷。本文以内存泄漏和堆损坏检测为核心,结合Visual Studi

weixin_28832121的博客 339

Application Verifier添加repro之后产生的问题

Application Verifier添加repro之后产生的bug。刚启动载入dll的时候会有 LuaPriv: Attaching to process...-- LuaPriv initialized-- 提示LuaPriv附加到进程。运行时候暂停,除了主线程,其它线程的调用堆栈看不到源代码。 1、只要访问SipMessage的sdp部分的payload

soliddream66的专栏 1246
上一篇: 注意,CE6下OAL内无法调用API
fredzeng
博客等级 码龄20年 19粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值