!htrace

! Htrace拡張機能は、1つまたは複数のハンドルのスタックトレース情報を表示します。

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
(カーネルモードのみ)ハンドルを表示するプロセスを指定します。 Processが0であるか省略されている場合は、現在のプロセスが使用されます。 ユーザーモードでは、現在のプロセスが常に使用されます。

Max_Traces
表示するスタックトレースの最大数を指定します。 ユーザーモードでは、このパラメーターを省略すると、ターゲットプロセスのすべてのスタックトレースが表示されます。

-enable
(ユーザーモードのみ)ハンドルトレースを有効にし、 -diff オプションによって初期状態として使用するハンドル情報の最初のスナップショットを取得します。

-snapshot.jar
(ユーザーモードのみ) -Diff オプションによって初期状態として使用される、現在のハンドル情報のスナップショットを取得します。

-diff
(ユーザーモードのみ)現在のハンドル情報を、取得したハンドル情報の最後のスナップショットと比較します。 開いているすべてのハンドルを表示します。

-disable
(ユーザーモードのみです。Windows Server 2003 以降のみ)ハンドルトレースを無効にします。 Windows XP では、ハンドルトレースはターゲットプロセスを終了することによってのみ無効にできます。

-?
デバッガーコマンドウィンドウにこの拡張機能の簡単なヘルプテキストを表示します。

DLL

Windows 2000

利用不可

Windows XP 以降

Kdexts.dll Ntsdexts.dll

追加情報

ハンドルの詳細については、Microsoft Windows SDK のドキュメントとMicrosoft Windows 内部の Mark Russinovich と David ソロモンを参照してください。 特定のハンドルに関する詳細情報を表示するには、 ! handle 拡張を使用します。

注釈

! Htraceを使用する前に、ハンドルのトレースを有効にする必要があります。 ハンドルトレースを有効にする方法の1つとして、 ! 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.