Condividi tramite


!mucchio

L'estensione !heap visualizza informazioni sull'utilizzo dell'heap , controlla i punti di interruzione nel gestore heap, rileva blocchi heap persi, cerca blocchi heap o visualizza informazioni sull'heap di pagina.

Questa estensione supporta l'heap di segmento e l'heap NT. Usare !heap senza parametri per elencare tutti gli heap e il relativo tipo.

!heap [HeapOptions] [ValidationOptions] [Heap] 
!heap -b [{alloc|realloc|free} [Tag]] [Heap | BreakAddress] 
!heap -B {alloc|realloc|free} [Heap | BreakAddress] 
!heap -l 
!heap -s [SummaryOptions] [StatHeapAddress] 
!heap -i HeapAddress
!heap -x [-v] Address 
!heap -p [PageHeapOptions] 
!heap -srch [Size] Pattern
!heap -flt FilterOptions
!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]
!heap [-p] -?
!heap -triage [Handle | Address] 

Parametri dell'heap segmento e NT

Questi parametri funzionano con gli heap Segment e NT.

-s
Specifica che vengono richieste informazioni di riepilogo. Se SummaryOptions e StatHeapAddress vengono omessi, vengono visualizzate informazioni di riepilogo per tutti gli heap associati al processo corrente.

SummaryOptions
Può essere una qualsiasi combinazione delle opzioni seguenti. SummaryOptions non fa distinzione tra maiuscole e minuscole . Digitare !heap -s -? per ulteriori informazioni.

Opzione Effetto

-v

Verifica tutti i blocchi di dati.

-b BucketSize

Specifica le dimensioni del bucket. Il valore predefinito è 1024 bit.

-d DumpBlockSize

Specifica le dimensioni del bucket.

-a

Esegue il dump di tutti i blocchi heap.

-c

Specifica che il contenuto di ogni blocco deve essere visualizzato.

-triage [Handle | Address]
Fa sì che il debugger cerchi automaticamente gli errori negli heap di un processo. Se un handle heap viene specificato come argomento, tale heap viene esaminato; in caso contrario, vengono cercati tutti gli heap che contengono l'indirizzo specificato e, se ne viene trovato uno, viene esaminato. L'uso di -triage è l'unico modo per convalidare il danneggiamento dell'heap a bassa frammentazione (LFH).

-x [-v]
Fa in modo che il debugger cerchi il blocco heap contenente l'indirizzo specificato. Se viene aggiunto -v, il comando cercherà l'intero spazio di memoria virtuale del processo corrente per i puntatori a questo blocco heap.

-l
Fa sì che il debugger rilevi blocchi heap persi.

-io Indirizzo -h HeapAddress
Visualizza informazioni sull'heap specificato.

Indirizzo
Specifica l'indirizzo da cercare.

-?
Visualizza un breve testo della Guida per questa estensione nella finestra Comando debugger. Usare !heap -? per la Guida generica e !heap -p -? per la Guida dell'heap di pagina.

Parametri dell'heap NT

Questi parametri funzionano solo con l'heap NT.

HeapOptions
Può essere una qualsiasi combinazione delle opzioni seguenti. I valori heapOptions fanno distinzione tra maiuscole e minuscole.

Opzione Effetto

-v

Fa sì che il debugger convaliderà l'heap specificato.

Nota Questa opzione non rileva il danneggiamento dell'heap a frammentazione bassa (LFH). Usare invece -triage .

-a

Fa in modo che la visualizzazione includa tutte le informazioni per l'heap specificato. Le dimensioni, in questo caso, vengono arrotondate fino alla granularità dell'heap. L'esecuzione di !heap con l'opzione -a equivale all'esecuzione con le tre opzioni -h -f -m, che possono richiedere molto tempo.

-h

Fa sì che la visualizzazione includa tutte le voci non LFH per l'heap specificato.

-Hl

Fa in modo che la visualizzazione includa tutte le voci per gli heap specificati, incluse le voci LFH.

-f

Fa sì che la visualizzazione includa tutte le voci dell'elenco gratuito per l'heap specificato.

-m

Fa in modo che la visualizzazione includa tutte le voci di segmento per l'heap specificato.

-t

Fa in modo che la visualizzazione includa le informazioni sul tag per l'heap specificato.

-T

Fa in modo che la visualizzazione includa le voci pseudo-tag per l'heap specificato.

-g

Fa in modo che la visualizzazione includa le informazioni sul tag globale. I tag globali sono associati a ogni allocazione senza tag.

-s

Fa in modo che la visualizzazione includa informazioni di riepilogo per l'heap specificato.

-k

(solo destinazioni basate su x86) Fa sì che la visualizzazione includa il backtrace dello stack associato a ogni voce.

ValidationOptions
Può essere una delle opzioni seguenti. ValidationOptions fa distinzione tra maiuscole e minuscole .

Opzione Effetto

-D

Disabilita validate-on-call per l'heap specificato.

-E

Abilita validate-on-call per l'heap specificato.

-d

Disabilita il controllo dell'heap per l'heap specificato.

-e

Abilita il controllo dell'heap per l'heap specificato.

-io Indirizzo heap o heapAddress
Visualizza informazioni sull'heap specificato.

BreakAddress
Specifica l'indirizzo di un blocco in cui deve essere impostato o rimosso un punto di interruzione.

-b
Fa sì che il debugger crei un punto di interruzione condizionale nel gestore dell'heap. L'opzione -b può essere seguita da allocazione, riallocazione o libera; specifica se il punto di interruzione verrà attivato allocando, riallocando o liberando memoria. Se breakAddress viene utilizzato per specificare l'indirizzo del blocco, è possibile omettere il tipo di punto di interruzione. Se l'heap viene usato per specificare l'indirizzo heap o l'indice dell'heap, il tipo deve essere incluso, nonché il parametro Tag .

Cartellino
Specifica il nome del tag all'interno dell'heap.

-B
Fa sì che il debugger rimuova un punto di interruzione condizionale dal gestore dell'heap. Il tipo di punto di interruzione (alloc, realloc o free) deve essere specificato e deve essere uguale a quello usato con l'opzione -b.

StatHeapAddress
Specifica l'indirizzo dell'heap. Se si tratta di 0 o viene omesso, vengono visualizzati tutti gli heap associati al processo corrente.

-p
Specifica che vengono richieste informazioni sull'heap di pagina. Se questa opzione viene utilizzata senza pageHeapOptions, verranno visualizzati tutti gli heap di pagina.

PageHeapOptions
Può essere una delle opzioni seguenti. PageHeapOptions fa distinzione tra maiuscole e minuscole . Se non vengono specificate opzioni, verranno visualizzati tutti gli handle dell'heap di pagina possibili.

Opzione Effetto

-h Handle

Fa in modo che il debugger visualizzi informazioni dettagliate su un heap di pagina con handle Handle.

-a Indirizzo

Fa sì che il debugger trovi l'heap di pagina il cui blocco contiene Address. Verranno inclusi dettagli completi sul modo in cui questo indirizzo è correlato ai blocchi heap a pagina intera, ad esempio se questo indirizzo fa parte di un heap di pagina, il relativo offset all'interno del blocco e se il blocco è allocato o è stato liberato. Le tracce dello stack vengono incluse ogni volta che sono disponibili. Quando si usa questa opzione, le dimensioni vengono visualizzate in multipli della granularità dell'allocazione dell'heap.

-t[c|s] [Tracce]

Fa in modo che il debugger visualizzi le tracce raccolte degli utenti heap pesanti. Le tracce specificano il numero di tracce da visualizzare. Il valore predefinito è quattro. Se sono presenti più tracce rispetto al numero specificato, vengono visualizzate le tracce meno antiche. Se si usa -t o -tc , le tracce vengono ordinate in base all'utilizzo del conteggio. Se si usa -ts , le tracce vengono ordinate in base alle dimensioni. Le opzioni -tc e -ts sono supportate solo in Windows XP. L'opzione -t è supportata solo in Windows XP e versioni precedenti di Windows.

-fi [Tracce]

Fa sì che il debugger visualizzi le tracce di inserimento degli errori più recenti. Le tracce specificano la quantità da visualizzare. Il valore predefinito è 4.

-tutto

Fa sì che il debugger visualizzi informazioni dettagliate su tutti gli heap di pagina.

-?

Fa in modo che il debugger visualizzi la Guida dell'heap di pagina, incluso un diagramma dei blocchi heap. Questi diagrammi possono essere visualizzati anche nella sezione Osservazioni seguenti.

Prima di poter usare qualsiasi comando di estensione !heap -p , l'heap di pagina deve essere abilitato per il processo di destinazione. Vedere i dettagli nella sezione Osservazioni seguenti.

-srch
Analizza tutti gli heap per individuare il modello specificato.

Modello
Specifica un modello per il quale eseguire l'aspetto.

Grandezza
Può essere una delle opzioni seguenti. Specifica le dimensioni del modello. Il valore '-' è obbligatorio.

Opzione Effetto

-b

Il modello è di dimensioni byte.

-w

Il modello è una parola di dimensioni.

-d

Il modello è una DWORD di dimensioni.

-q

Il modello è una QWORD di dimensioni.

Se non viene specificato nessuno dei valori precedenti, si presuppone che il modello abbia le stesse dimensioni del puntatore del computer.

-Flt
Limita la visualizzazione in modo da includere solo heap con la dimensione o l'intervallo di dimensioni specificato.

FilterOptions
Può essere una delle opzioni seguenti. FilterOptions fa distinzione tra maiuscole e minuscole .

Opzione Effetto

s Size

Limita la visualizzazione in modo da includere solo gli heap delle dimensioni specificate.

r SizeMin SizeMax

Limita la visualizzazione in modo da includere solo gli heap all'interno dell'intervallo di dimensioni specificato.

-Stat
Visualizza le statistiche di utilizzo per l'heap specificato.

-h Maneggiare
Fa sì che vengano visualizzate solo le statistiche di utilizzo per l'heap in Handle . Se Handle è 0 o omesso, vengono visualizzate le statistiche di utilizzo per tutti gli heap.

-grp GroupBy
Riordina la visualizzazione come specificato da GroupBy. Le opzioni per GroupBy sono disponibili nella tabella seguente.

Opzione Effetto

A

Visualizza le statistiche di utilizzo in base alle dimensioni di allocazione.

B

Visualizza le statistiche di utilizzo in base al numero di blocchi.

S

Visualizza le statistiche di utilizzo in base alle dimensioni totali di ogni allocazione.

MaxDisplay
Limita l'output solo al numero maxDisplay di righe.

DLL

Windows XP e versioni successive

Ext.dll Exts.dll

Informazioni aggiuntive

Per informazioni sugli heap, vedere le risorse seguenti:

Book: Microsoft Windows Internals di Mark Russinovich e David Solomon.

Esempio 11: Abilitazione della verifica dell'heap della pagina

Esempio 12: Uso della verifica dell'heap di pagina per trovare un bug

Per informazioni sull'uso del logger di memoria Heap, vedere Esempio 11: Avvio di una sessione di traccia privata

Osservazioni:

Questo comando di estensione può essere usato per eseguire un'ampia gamma di attività.

Il comando !heap standard viene usato per visualizzare le informazioni sull'heap per il processo corrente. Questa opzione deve essere usata solo per i processi in modalità utente. Il comando !pool extension deve essere usato per i processi di sistema.

I comandi !heap -b e !heap -B vengono usati per creare ed eliminare punti di interruzione condizionali nel gestore dell'heap.

Il comando !heap -l rileva blocchi heap persi. Usa un algoritmo di Garbage Collector per rilevare tutti i blocchi occupati dagli heap a cui non si fa riferimento in qualsiasi punto dello spazio indirizzi del processo. Per il completamento di applicazioni di grandi dimensioni, il completamento può richiedere alcuni minuti. Questo comando è disponibile solo in Windows XP e versioni successive di Windows.

Il comando !heap -x cerca un blocco heap contenente un determinato indirizzo. Se si usa l'opzione -v , questo comando cercherà anche l'intero spazio di memoria virtuale del processo corrente per individuare i puntatori a questo blocco heap. Questo comando è disponibile solo in Windows XP e versioni successive di Windows.

Il comando !heap -p visualizza varie forme di informazioni sull'heap di pagina. Prima di usare !heap -p, è necessario abilitare l'heap di pagina per il processo di destinazione. Questa operazione viene eseguita tramite l'utilità Global Flags (gflags.exe). A tale scopo, avviare l'utilità, immettere il nome dell'applicazione di destinazione nella casella di testo Nome file immagine, selezionare Opzioni file immagine e Abilita heap pagina e selezionare Applica. In alternativa, è possibile avviare l'utilità Global Flags da una finestra del prompt dei comandi digitando gflags /i xxx.exe +hpa, dove xxx.exe è il nome dell'applicazione di destinazione.

I comandi !heap -p -t[c|s] non sono supportati oltre a Windows XP. Usare lo strumento UMDH fornito con il pacchetto del debugger per ottenere risultati simili.

Il comando !heap -srch visualizza le voci dell'heap che contengono un determinato criterio specificato.

Il comando !heap -flt limita la visualizzazione solo alle allocazioni heap di una dimensione specificata.

Il comando !heap -stat visualizza le statistiche di utilizzo dell'heap.

Di seguito è riportato un esempio del comando !heap standard:

0:000> !ntsdexts.heap -a
Index   Address  Name      Debugging options enabled
  1:   00250000 
    Segment at 00250000 to 00350000 (00056000 bytes committed)
    Flags:               50000062
    ForceFlags:          40000060
    Granularity:         8 bytes
    Segment Reserve:     00100000
    Segment Commit:      00004000
    DeCommit Block Thres:00000400
    DeCommit Total Thres:00002000
    Total Free Size:     000003be
    Max. Allocation Size:7ffddfff
    Lock Variable at:    00250b54
    Next TagIndex:       0012
    Maximum TagIndex:    07ff
    Tag Entries:         00350000
    PsuedoTag Entries:   00250548
    Virtual Alloc List:  00250050
    UCR FreeList:        002504d8
    128-bit bitmap of free lists
    FreeList Usage:      00000014 00000000 00000000 00000000
              Free    Free
              List    List
#       Head      Blink      Flink
    FreeList[ 00 ] at 002500b8: 002a4378 . 002a4378
                                0x02 - HEAP_ENTRY_EXTRA_PRESENT
                                0x04 - HEAP_ENTRY_FILL_PATTERN
        Entry     Prev    Cur   0x10 - HEAP_ENTRY_LAST_ENTRY

Address   Size    Size  flags
002a4370: 00098 . 01c90 [14] - free
    FreeList[ 02 ] at 002500c8: 0025cb30 . 002527b8
002527b0: 00058 . 00010 [04] - free
0025cb28: 00088 . 00010 [04] - free
    FreeList[ 04 ] at 002500d8: 00269a08 . 0026e530
0026e528: 00038 . 00020 [04] - free
0026a4d0: 00038 . 00020 [06] - free
0026f9b8: 00038 . 00020 [04] - free
0025cda0: 00030 . 00020 [06] - free
00272660: 00038 . 00020 [04] - free
0026ab60: 00038 . 00020 [06] - free
00269f20: 00038 . 00020 [06] - free
00299818: 00038 . 00020 [04] - free
0026c028: 00038 . 00020 [06] - free
00269a00: 00038 . 00020 [46] - free
 
    Segment00 at 00250b90:
Flags:           00000000
Base:            00250000
First Entry:     00250bc8
Last Entry:      00350000
Total Pages:     00000080
Total UnCommit:  00000055
Largest UnCommit:000aa000
UnCommitted Ranges: (1)
    002a6000: 000aa000

    Heap entries for Segment00 in Heap 250000
                        0x01 - HEAP_ENTRY_BUSY            
                        0x02 - HEAP_ENTRY_EXTRA_PRESENT   
                        0x04 - HEAP_ENTRY_FILL_PATTERN    
                        0x08 - HEAP_ENTRY_VIRTUAL_ALLOC   
                        0x10 - HEAP_ENTRY_LAST_ENTRY      
                        0x20 - HEAP_ENTRY_SETTABLE_FLAG1  
                        0x40 - HEAP_ENTRY_SETTABLE_FLAG2  
Entry     Prev    Cur   0x80 - HEAP_ENTRY_SETTABLE_FLAG3  

Address   Size    Size  flags       (Bytes used)    (Tag name)
00250000: 00000 . 00b90 [01] - busy (b90)
00250b90: 00b90 . 00038 [01] - busy (38) 
00250bc8: 00038 . 00040 [07] - busy (24), tail fill (NTDLL!LDR Database)
00250c08: 00040 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
00250c68: 00060 . 00028 [07] - busy (10), tail fill (NTDLL!LDR Database)
00250c90: 00028 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
00250cf0: 00060 . 00050 [07] - busy (38), tail fill (Objects=  80)
00250d40: 00050 . 00048 [07] - busy (2e), tail fill (NTDLL!LDR Database)
00250d88: 00048 . 00c10 [07] - busy (bf4), tail fill (Objects>1024)
00251998: 00c10 . 00030 [07] - busy (12), tail fill (NTDLL!LDR Database)
...
002525c0: 00030 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
00252620: 00060 . 00050 [07] - busy (38), tail fill (NTDLL!LDR Database)
00252670: 00050 . 00040 [07] - busy (22), tail fill (NTDLL!CSRSS Client)
002526b0: 00040 . 00040 [07] - busy (24), tail fill (Objects=  64)
002526f0: 00040 . 00040 [07] - busy (24), tail fill (Objects=  64)
00252730: 00040 . 00028 [07] - busy (10), tail fill (Objects=  40)
00252758: 00028 . 00058 [07] - busy (3c), tail fill (Objects=  88)
002527b0: 00058 . 00010 [04] free fill
002527c0: 00010 . 00058 [07] - busy (3c), tail fill (NTDLL!LDR Database)
00252818: 00058 . 002d0 [07] - busy (2b8), tail fill (Objects= 720)
00252ae8: 002d0 . 00330 [07] - busy (314), tail fill (Objects= 816)
00252e18: 00330 . 00330 [07] - busy (314), tail fill (Objects= 816)
00253148: 00330 . 002a8 [07] - busy (28c), tail fill (NTDLL!LocalAtom)
002533f0: 002a8 . 00030 [07] - busy (18), tail fill (NTDLL!LocalAtom)
00253420: 00030 . 00030 [07] - busy (18), tail fill (NTDLL!LocalAtom)
00253450: 00030 . 00098 [07] - busy (7c), tail fill (BASEDLL!LMEM)
002534e8: 00098 . 00060 [07] - busy (44), tail fill (BASEDLL!TMP)
00253548: 00060 . 00020 [07] - busy (1), tail fill (Objects=  32)
00253568: 00020 . 00028 [07] - busy (10), tail fill (Objects=  40)
00253590: 00028 . 00030 [07] - busy (16), tail fill (Objects=  48)
...
0025ccb8: 00038 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
0025cd18: 00060 . 00058 [07] - busy (3c), tail fill (NTDLL!LDR Database)
0025cd70: 00058 . 00030 [07] - busy (18), tail fill (NTDLL!LDR Database)
0025cda0: 00030 . 00020 [06] free fill (NTDLL!Temporary)
0025cdc0: 00020 . 00258 [07] - busy (23c), tail fill (Objects= 600)
0025d018: 00258 . 01018 [07] - busy (1000), tail fill (Objects>1024)
0025e030: 01018 . 00060 [07] - busy (48), tail fill (NTDLL!LDR Database)
...
002a4190: 00028 . 00118 [07] - busy (100), tail fill (BASEDLL!GMEM)
002a42a8: 00118 . 00030 [07] - busy (18), tail fill (Objects=  48)
002a42d8: 00030 . 00098 [07] - busy (7c), tail fill (Objects= 152)
002a4370: 00098 . 01c90 [14] free fill
002a6000:      000aa000      - uncommitted bytes.

Di seguito è riportato un esempio del comando !heap -l :

1:0:011> !heap -l
1:Heap 00170000
Heap 00280000
Heap 00520000
Heap 00b50000
Heap 00c60000
Heap 01420000
Heap 01550000
Heap 016d0000
Heap 019b0000
Heap 01b40000
Scanning VM ...
## Entry     User      Heap      Segment       Size  PrevSize  Flags

001b2958  001b2960  00170000  00000000        40        18  busy extra
001b9cb0  001b9cb8  00170000  00000000        80       300  busy extra
001ba208  001ba210  00170000  00000000        80        78  busy extra
001cbc90  001cbc98  00170000  00000000        e0        48  busy extra
001cbd70  001cbd78  00170000  00000000        d8        e0  busy extra
001cbe90  001cbe98  00170000  00000000        68        48  busy extra
001cbef8  001cbf00  00170000  00000000        58        68  busy extra
001cc078  001cc080  00170000  00000000        f8       128  busy extra
001cc360  001cc368  00170000  00000000        80        50  busy extra
001cc3e0  001cc3e8  00170000  00000000        58        80  busy extra
001fe550  001fe558  00170000  00000000       150       278  busy extra
001fe6e8  001fe6f0  00170000  00000000        48        48  busy extra
002057a8  002057b0  00170000  00000000        58        58  busy extra
00205800  00205808  00170000  00000000        48        58  busy extra
002058b8  002058c0  00170000  00000000        58        70  busy extra
00205910  00205918  00170000  00000000        48        58  busy extra
00205958  00205960  00170000  00000000        90        48  busy extra
00246970  00246978  00170000  00000000        60        88  busy extra
00251168  00251170  00170000  00000000        78        d0  busy extra user_flag
00527730  00527738  00520000  00000000        40        40  busy extra
00527920  00527928  00520000  00000000        40        80  busy extra
21 leaks detected.

La tabella in questo esempio contiene tutte le 21 perdite trovate.

Di seguito è riportato un esempio del comando !heap -x :

0:011> !heap 002057b8 -x
## Entry     User      Heap      Segment       Size  PrevSize  Flags

002057a8  002057b0  00170000  00170640        58        58  busy extra

Di seguito è riportato un esempio del comando !heap -x -v :

1:0:011> !heap 002057b8 -x -v
## 1:Entry     User      Heap      Segment       Size  PrevSize  Flags

002057a8  002057b0  00170000  00170640        58        58  busy extra

Search VM for address range 002057a8 - 002057ff : 00205990 (002057d0),

In questo esempio è presente un puntatore a questo blocco heap in corrispondenza dell'indirizzo 0x00205990.

Di seguito è riportato un esempio del comando !heap -flt s :

0:001>!heap -flt s 0x50

Verranno visualizzate tutte le allocazioni di dimensioni 0x50.

Di seguito è riportato un esempio del comando !heap -flt r :

0:001>!heap -flt r 0x50 0x80

Verranno visualizzate ogni allocazione la cui dimensione è compresa tra 0x50 e 0x7F.

Di seguito è riportato un esempio del comando !heap -srch .

0:001> !heap -srch 77176934
    _HEAP @ 00090000
   in HEAP_ENTRY: Size : Prev Flags - UserPtr UserSize - state
        00099A48: 0018 : 0005 [01] - 00099A50 (000000B8) - (busy)
          ole32!CALLFRAME_CACHE<INTERFACE_HELPER_CLSID>::`vftable'
    _HEAP @ 00090000
   in HEAP_ENTRY: Size : Prev Flags - UserPtr UserSize - state
        00099B58: 0018 : 0005 [01] - 00099B60 (000000B8) - (busy)
          ole32!CALLFRAME_CACHE<INTERFACE_HELPER_CLSID>::`vftable'

I diagrammi seguenti illustrano la disposizione dei blocchi heap.

Blocco heap pagina chiaro - allocato:

 +-----+---------------+---+                                  
 |     |               |   |                                  
 +-----+---------------+---+                                  
    ^         ^          ^                                    
    |         |          8 suffix bytes (filled with 0xA0)    
    |         User allocation (filled with E0 if zeroing not requested) 
    Block header (starts with 0xABCDAAAA and ends with 0xDCBAAAAA) 

Blocco heap pagina chiaro - liberato:

 +-----+---------------+---+                                  
 |     |               |   |                                  
 +-----+---------------+---+                                  
    ^         ^          ^                                    
    |         |          8 suffix bytes (filled with 0xA0)    
    |         User allocation (filled with F0 bytes)          
    Block header (starts with 0xABCDAAA9 and ends with 0xDCBAAA9) 

Blocco heap a pagina intera- allocato:

 +-----+---------+---+-------                                 
 |     |         |   |  ... N/A page                          
 +-----+---------+---+-------                                 
    ^       ^      ^                                          
    |       |      0-7 suffix bytes (filled with 0xD0)        
    |       User allocation (if zeroing not requested, filled   
            with C0)       
    Block header (starts with 0xABCDBBBB and ends with 0xDCBABBBB) 

Blocco heap a pagina intera - liberato:

 +-----+---------+---+-------                                 
 |     |         |   |  ... N/A page                          
 +-----+---------+---+-------                                 
    ^       ^      ^                                          
    |       |      0-7 suffix bytes (filled with 0xD0)        
    |       User allocation (filled with F0 bytes)            
    Block header (starts with 0xABCDBBA and ends with 0xDCBABBBA) 

Per visualizzare l'analisi dello stack dell'allocazione o la liberazione di un blocco heap heap o di un blocco heap a pagina completa, usare dt DPH_BLOCK_INFORMATION con l'indirizzo dell'intestazione, seguito da dds con il campo StackTrace del blocco.