У меня взрыв, отслеживающий некоторую кучу повреждений. Я включил стандартную проверку кучи страниц с помощью
gflags /p /enable myprogram.exe
и это подтверждает коррупцию:
===========================================================
VERIFIER STOP 00000008: pid 0x1040: corrupted suffix pattern
10C61000 : Heap handle
19BE0CF8 : Heap block
00000010 : Block size
00000000 :
===========================================================
Когда я включаю полную проверку кучи страниц (gflags /p /enable myprogram.exe /full
) в ожидании того, что это приведет к возникновению ошибки во время появления повреждения, я больше ничего не получаю.
Я начал надеяться, читая Расширенная отладка Windows: повреждение памяти, часть II - куча , которая является главой из Расширенная отладка Windows . Я установил WinDbg и загрузил символы отладки для user32.dll
, kernel32.dll
, ntdll.dll
в соответствии с http://support.microsoft.com/kb/311503. Теперь, когда программа останавливается в отладчике, я могу выполнить эту команду, чтобы просмотреть информацию о странице кучи:
0:000> dt _DPH_BLOCK_INFORMATION 19BE0CF8-0x20
ntdll!_DPH_BLOCK_INFORMATION
+0x000 StartStamp : 0xabcdaaaa
+0x004 Heap : 0x90c61000
+0x008 RequestedSize : 0x10
+0x00c ActualSize : 0x38
+0x010 FreeQueue : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x010 TraceIndex : 0
+0x018 StackTrace : (null)
+0x01c EndStamp : 0xdcbaaaaa
Я встревожен трассировкой стека (null)
. Теперь http://msdn.microsoft.com/en-us/library/ms220938%28VS.80%29.aspx говорит:
Поле StackTrace не всегда будет содержать ненулевое значение по различным причинам. Во-первых, обнаружение трассировки стека поддерживается только на платформах x86, а во-вторых, даже на машинах x86 алгоритмы обнаружения трассировки стека не являются полностью надежными. Если блок является выделенным блоком, трассировка стека предназначена для момента выделения. Если блок был освобожден, трассировка стека - в свободный момент.
Но мне интересно, есть ли у кого-нибудь мысли по поводу увеличения шансов увидеть трассировку стека с момента выделения.
Спасибо за чтение!