Поделиться через


!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.