!htrace

!htrace 扩展显示一个或多个句柄的堆栈跟踪信息。

用户模式语法

!htrace [Handle [Max_Traces]] 
!htrace -enable [Max_Traces]
!htrace -snapshot
!htrace -diff
!htrace -disable
!htrace -? 

内核模式语法

!htrace [Handle [Process [Max_Traces]]] 
!htrace -? 

参数

Handle 指定将显示其堆栈跟踪的句柄。 如果 Handle 为 0 或省略,则将显示进程中所有句柄的堆栈跟踪。

Process(仅内核模式)指定将显示其句柄的进程。 如果 Process 为 0 或省略,则使用当前进程。 在用户模式下,始终使用当前进程。

Max_Traces 指定要显示的堆栈跟踪的最大数目。 在用户模式下,如果省略此参数,则会显示目标进程的所有堆栈跟踪。

-enable(仅用户模式)启用句柄跟踪,拍摄句柄信息的第一个快照,作为 -diff 选项的初始状态使用。

-snapshot(仅用户模式)拍摄句柄信息的快照,作为 -diff 选项的初始状态使用。

-diff(仅用户模式)比较当前句柄信息与所拍摄的句柄信息的最后快照。 显示所有仍处于打开状态的句柄。

-disable(仅用户模式)禁用句柄跟踪。

-?

在“调试器命令”窗口中显示此扩展的简单帮助文本。

DLL

Windows XP 及更高版本

Kdexts.dll Ntsdexts.dll

其他信息

若要显示有关特定句柄的详细信息,请使用 !handle 扩展。

有关句柄的信息,请参阅 Mark Russinovich 和 David Solomon 编写的 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.