!htrace
A extensão !htrace exibe informações de rastreamento de pilha para um ou mais identificadores.
Sintaxe do modo de usuário
!htrace [Handle [Max_Traces]]
!htrace -enable [Max_Traces]
!htrace -snapshot
!htrace -diff
!htrace -disable
!htrace -?
Sintaxe do modo kernel
!htrace [Handle [Process [Max_Traces]]]
!htrace -?
Parâmetros
Identificador Especifica o identificador cujo rastreamento de pilha será exibido. Se o Identificador for 0 ou omitido, os rastreamentos de pilha para todos os identificadores no processo serão exibidos.
Processo (somente modo kernel) Especifica o processo cujos identificadores serão exibidos. Se Processo for 0 ou omitido, o processo atual será usado. No modo de usuário, o processo atual é sempre usado.
Max_Traces Especifica o número máximo de rastreamentos de pilha a serem exibidos. No modo de usuário, se esse parâmetro for omitido, todos os rastreamentos de pilha para o processo de destino serão exibidos.
-enable (somente modo de usuário) Habilita o rastreamento do identificador e tira o primeiro instantâneo das informações do identificador a serem usadas como o estado inicial pela opção -diff.
-snapshot (somente modo de usuário) Tira um instantâneo das informações atuais do identificador para usar como o estado inicial pela opção -diff.
-diff (somente modo de usuário) Compara as informações atuais do identificador com o último instantâneo das informações do identificador que foram tiradas. Exibe todos os identificadores que ainda estão abertos.
-disable (somente modo de usuário) Desativa o rastreamento do identificador.
-?
Exibe um breve texto de ajuda para esta extensão na janela de comando do depurador.
DLL
Windows XP e versões posteriores
Kdexts.dll Ntsdexts.dll
Informações Adicionais
Para exibir mais informações sobre um identificador específico, use a extensão !handle.
Para obter informações sobre identificadores, consulte Microsoft Windows Internals, de Mark Russinovich e David Solomon.
Comentários
Antes que !htrace possa ser usado, o rastreamento de identificador deve ser habilitado. Uma maneira de habilitar o rastreamento de identificador é inserir o comando !htrace -enable. Quando o rastreamento de identificador está habilitado, as informações de rastreamento de pilha são salvas sempre que o processo abre um identificador, fecha um identificador ou faz referência a um identificador inválido. São essas informações de rastreamento de pilha que o !htrace exibe.
Observação Você também pode habilitar o rastreamento de identificador ativando o Application Verifier para o processo de destino e selecionando a opção Identificadores.
Alguns dos traços relatados por !htrace podem ser de um contexto de processo diferente. Nesse caso, os endereços de retorno podem não ser resolvidos corretamente no contexto do processo atual ou podem resolver para os símbolos errados.
O exemplo a seguir exibe informações sobre todos os identificadores no processo 0x81400300.
kd> !htrace 0 81400300
Process 0x81400300
ObjectTable 0xE10CCF60
##
Handle 0x7CC - CLOSE:
0x8018FCB9: ntoskrnl!ExDestroyHandle+0x103
0x801E1D12: ntoskrnl!ObpCloseHandleTableEntry+0xE4
0x801E1DD9: ntoskrnl!ObpCloseHandle+0x85
0x801E1EDD: ntoskrnl!NtClose+0x19
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7CC - OPEN:
0x8018F44A: ntoskrnl!ExCreateHandle+0x94
0x801E3390: ntoskrnl!ObpCreateUnnamedHandle+0x10C
0x801E7317: ntoskrnl!ObInsertObject+0xC3
0x77DE23B2: KERNEL32!CreateSemaphoreA+0x66
0x010011C5: badhandle!main+0x45
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7DC - BAD REFERENCE:
0x8018F709: ntoskrnl!ExMapHandleToPointerEx+0xEA
0x801E10F2: ntoskrnl!ObReferenceObjectByHandle+0x12C
0x801902BE: ntoskrnl!NtSetEvent+0x6C
0x80154965: ntoskrnl!_KiSystemService+0xC4
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7DC - CLOSE:
0x8018FCB9: ntoskrnl!ExDestroyHandle+0x103
0x801E1D12: ntoskrnl!ObpCloseHandleTableEntry+0xE4
0x801E1DD9: ntoskrnl!ObpCloseHandle+0x85
0x801E1EDD: ntoskrnl!NtClose+0x19
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7DC - OPEN:
0x8018F44A: ntoskrnl!ExCreateHandle+0x94
0x801E3390: ntoskrnl!ObpCreateUnnamedHandle+0x10C
0x801E7317: ntoskrnl!ObInsertObject+0xC3
0x77DE265C: KERNEL32!CreateEventA+0x66
0x010011A0: badhandle!main+0x20
0x010012C1: badhandle!mainCRTStartup+0xE3
0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
##
Parsed 0x6 stack traces.
Dumped 0x5 stack traces.