App Verifier Stop 0202:在GdiPlusShutdown期间释放包含活动关键部分的堆块

时间:2012-06-21 19:50:27

标签: gdi+ application-verifier

运行Microsoft Application Verifier时,我会在关机时收到错误0202

VERIFIER STOP 00000202:
   pid 0x1160: Freeing heap block containing an active critical section. 
   11456F48 : Critical section address.
   047D05B4 : Critical section initialization stack trace.
   11456F40 : Heap block...(cut off)

调用GdiplusShutdown时会发生错误。

从Application Verifier文档:

  

释放包含活动关键部分的堆块

     

Application Verifier中断消息

     

释放包含活动关键部分的堆块。大小的内存位置包含一个活动锁。

     

可能的原因

     

如果堆分配包含临界区,分配被释放且临界区未被删除,则会生成此中断。

     

Application Verifier显示的信息

     
      
  • 参数1 - 关键部分地址
  •   
  • 参数2 - 关键部分初始化堆栈跟踪
  •   
  • 参数3 - 堆块地址
  •   
  • 参数4 - 堆块大小
  •   
  • 描述 - 释放包含活动关键部分的堆块
  •   
     

其他信息

     

验证者停止代码0202.

     

检查当前调用堆栈的内容。罪魁祸首通常是当前堆栈跟踪上的HeapFree或HeapDestroy的调用者。

     

此错误的频率很高。

     

要调试此停止,请使用以下调试器命令:

     
      
  • !cs –s parameter1 - 转储有关此关键部分的信息。
  •   
  • ln parameter1 - 显示临界区地址附近的符号。这应该有助于识别泄漏的关键部分。
  •   
  • dds parameter2 - 转储此临界区初始化的堆栈跟踪。
  •   
     

parameter3 parameter4 可能有助于了解此堆块的分配位置(分配的大小可能很大)。

1 个答案:

答案 0 :(得分:0)

几个月前我发现了这个错误,我忘记了解决方案。

在尝试关闭GDI +之前,请务必释放任何GDI +图像(例如GdipDisposeImage)。

否则你泄漏一个关键部分,谁知道还有什么。当然不要尝试dispose an image after GDI+ has already been shutdown