!htrace
Расширение !htrace отображает сведения трассировки стека для одного или нескольких дескрипторов.
Синтаксис пользовательского режима
!htrace [Handle [Max_Traces]]
!htrace -enable [Max_Traces]
!htrace -snapshot
!htrace -diff
!htrace -disable
!htrace -?
Синтаксис режима ядра
!htrace [Handle [Process [Max_Traces]]]
!htrace -?
Параметры
Дескриптор указывает дескриптор , трассировка стека которого будет отображаться. Если дескриптор равен 0 или опущен, будут отображаться трассировки стека для всех дескрипторов процесса.
Процесс (только в режиме ядра) Указывает процесс, дескриптор которого будет отображаться. Если процесс равен 0 или опущен, используется текущий процесс. В пользовательском режиме текущий процесс всегда используется.
Max_Traces Указывает максимальное количество отображаемых трассировок стека. В пользовательском режиме, если этот параметр опущен, будут отображаться все трассировки стека для целевого процесса.
-enable (только в пользовательском режиме) включает трассировку и принимает первый моментальный снимок данных дескриптора, используемых в качестве начального состояния параметром -diff .
-snapshot (только в пользовательском режиме) принимает моментальный снимок текущей информации дескриптора для использования в качестве начального состояния параметром -diff .
-diff (только в пользовательском режиме) сравнивает текущие данные дескриптора с последним моментальным снимком данных дескриптора, которые были приняты. Отображает все дескрипторы, которые по-прежнему открыты.
-disable (только в пользовательском режиме) отключает трассировку.
-?
Отображает краткий текст справки для этого расширения в окне команды отладчика.
DLL-библиотеки
Windows XP и более поздние версии
Kdexts.dll Ntsdexts.dll
Дополнительная информация
Чтобы отобразить дополнительные сведения о конкретном дескрипторе , используйте расширение !handle .
Сведения об дескрипторах см. в разделе "Внутренние компоненты Microsoft Windows" Марком Руссиновичем и Дэвидом Соломоном.
Замечания
Перед использованием !htrace необходимо включить трассировку дескриптора. Одним из способов включения трассировки дескриптора является ввод команды !htrace -enable . Если трассировка дескриптора включена, данные трассировки стека сохраняются каждый раз, когда процесс открывает дескриптор, закрывает дескриптор или ссылается на недопустимый дескриптор. Это данные трассировки стека, отображаемые !htrace .
Обратите внимание, что можно также включить трассировку дескриптора, активировав средство проверки приложений для целевого процесса и выбрав параметр "Дескриптор".
Некоторые трассировки, сообщаемые !htrace , могут находиться в другом контексте процесса. В этом случае возвращаемые адреса могут не разрешаться должным образом в текущем контексте процесса или разрешать неправильные символы.
В следующем примере отображаются сведения обо всех дескрипторах в процессе 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.