运行Microsoft Application Verifier0202
时,我会在关机时收到错误消息:
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 显示的信息
- Parameter1 - 临界区地址
- Parameter2 - 关键部分初始化堆栈跟踪
- Parameter3 - 堆块地址
- Parameter4 - 堆块大小
- 描述 - 释放包含活动临界区的堆块
附加信息
验证程序停止代码 0202。
检查当前调用堆栈的内容。罪魁祸首通常是当前堆栈跟踪上 HeapFree 或 HeapDestroy 的调用者。
此错误的频率很高。
要调试此停止,请使用以下调试器命令:
!cs –s parameter1
- 转储有关此关键部分的信息。ln parameter1
– 在临界区地址附近显示符号。这应该有助于识别泄漏的关键部分。dds parameter2
– 转储此临界区初始化的堆栈跟踪。parameter3和parameter4可能有助于了解该堆块在哪里分配(分配的大小可能很重要)。