App Verifier Stop 0202: Освобождение блока кучи, содержащего активный критический раздел, во время GdiPlusShutdown

При запуске 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

  • Parameter1 - Адрес критической секции
  • Parameter2 — трассировка стека инициализации критической секции
  • Parameter3 — адрес блока кучи
  • Parameter4 - Размер блока кучи
  • Описание — Освобождение блока кучи, содержащего активную критическую секцию

Дополнительная информация

Код остановки верификатора 0202.

Проверьте содержимое текущего стека вызовов. Виновником обычно является вызывающий HeapFree или HeapDestroy в текущей трассировке стека.

Частота этой ошибки высока.

Для отладки этой остановки используйте следующие команды отладчика:

  • !cs –s parameter1 - дамп информации об этом критическом разделе.
  • ln parameter1 — отображать символы рядом с адресом критической секции. Это должно помочь идентифицировать утечку критической секции.
  • dds parameter2 — дамп трассировки стека для инициализации этой критической секции.

parameter3 и parameter4 могут помочь понять, где был выделен этот блок кучи (размер выделения, вероятно, значителен).


person Ian Boyd    schedule 21.06.2012    source источник


Ответы (1)


у меня была эта ошибка несколько месяцев назад, и я забыл решение.

Обязательно освободите все образы GDI+ (например, GdipDisposeImage) перед попыткой выключить GDI+.

В противном случае вы просочитесь в Критический раздел, и кто знает, что еще. И уж точно не пытайтесь удалить изображение после GDI+, выключение.

person Ian Boyd    schedule 21.06.2012