!htrace

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

User-Mode语法

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

Kernel-Mode语法

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

参数

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

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

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

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

-snapshot
(用户模式) 创建当前句柄信息的快照,以用作 -diff 选项的初始状态。

-diff
(用户模式) 将当前句柄信息与所获取句柄信息的最后一个快照进行比较。 显示仍处于打开状态的所有句柄。

-disable
(用户模式;Windows Server 2003 及更高版本) 禁用句柄跟踪。 在 Windows XP 中,只有终止目标进程才能禁用句柄跟踪。

-?
在调试器编辑器中显示此扩展的一些简短帮助命令窗口。

DLL

Windows 2000

不可用

Windows XP 及更高版本

Kdexts.dll Ntsdexts.dll

其他信息

有关句柄的信息,请参阅文档和 Microsoft Microsoft Windows SDK内部Windows Mark Russin一文和 David 一文。 若要显示有关特定句柄的进一步信息,请使用 !handle 扩展。

备注

必须先启用句柄跟踪,然后才能使用 !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.