运行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
时会发生错误。从应用程序验证程序文档中:
释放包含活动临界区的堆块
应用程序验证程序中断消息
释放包含活动临界区的堆块。大小为的内存位置包含一个活动锁。
可能的原因
如果堆分配包含关键部分,释放了分配并且尚未删除关键部分,则会生成此中断。
应用程序验证程序显示的信息
参数1-关键段地址
参数2-关键部分初始化堆栈跟踪
参数3-堆块地址
参数4-堆块大小
描述-释放包含活动临界区的堆块
附加信息
验证程序停止码0202。
检查当前调用堆栈的内容。罪魁祸首通常是当前堆栈跟踪上的HeapFree或HeapDestroy的调用方。
此错误的频率很高。
要调试此停止,请使用以下调试器命令:
!cs –s parameter1
-转储有关此关键部分的信息。ln parameter1
–在临界区地址附近显示符号。这应该有助于识别泄漏的关键部分。dds parameter2
–转储此关键节初始化的堆栈跟踪。parameter3和parameter4可能有助于了解在哪里分配了该堆块(分配的大小可能很重要)。
最佳答案
我几个月前遇到了这个错误,我忘记了解决方案。
在尝试关闭GDI +之前,请确保释放所有GDI +映像(例如GdipDisposeImage
)。
否则,您会泄漏关键部分,谁知道呢。当然也不要尝试dispose an image after GDI+ has already been shutdown。
关于gdi+ - App Verifier停止0202:在GdiPlusShutdown期间释放包含事件临界区的堆块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11145714/