!obtrace
!obtrace 拡張は、指定されたオブジェクトのオブジェクト参照トレースデータを表示します。
!obtrace Object
パラメーター
Object
オブジェクトへのポインタまたはパス。
DLL
Kdexts.dll
追加情報
グローバルフラグユーティリティ (GFlags) の詳細については、Windows Driver Kit (WDK) ドキュメントおよび Microsoft Windows Internals (Mark Russinovich and David Solomon 著) を参照してください。
解説
Windowsのオブジェクト参照トレース機能は、オブジェクト参照カウンタがインクリメントまたはデクリメントされるたびに、逐次スタックトレースを記録します。
この拡張機能を使用してオブジェクト参照トレースデータを表示する前に、GFlags を使用して指定したオブジェクトのオブジェクト参照トレースを有効にする必要があります。 オブジェクト参照トレースを有効にするには、カーネルフラグ(ランタイム)設定として、変更は即座に有効になりますが、シャットダウンしたり再起動したりすると消えてしまいます。
以下は、!obtrace 拡張機能からの出力の例である:
kd> !obtrace 0xfa96f700
Object: fa96f700 Image: cmd.exe
Sequence (+/-) Stack
-------- ----- ---------------------------------------------------
2421d +1 nt!ObCreateObject+180
nt!NtCreateEvent+92
nt!KiFastCallEntry+104
nt!ZwCreateEvent+11
win32k!UserThreadCallout+6f
win32k!W32pThreadCallout+38
nt!PsConvertToGuiThread+174
nt!KiBBTUnexpectedRange+c
2421e -1 nt!ObfDereferenceObject+19
nt!NtCreateEvent+d4
nt!KiFastCallEntry+104
nt!ZwCreateEvent+11
win32k!UserThreadCallout+6f
win32k!W32pThreadCallout+38
nt!PsConvertToGuiThread+174
nt!KiBBTUnexpectedRange+c
2421f +1 nt!ObReferenceObjectByHandle+1c3
win32k!xxxCreateThreadInfo+37d
win32k!UserThreadCallout+6f
win32k!W32pThreadCallout+38
nt!PsConvertToGuiThread+174
nt!KiBBTUnexpectedRange+c
24220 +1 nt!ObReferenceObjectByHandle+1c3
win32k!ProtectHandle+22
win32k!xxxCreateThreadInfo+3a0
win32k!UserThreadCallout+6f
win32k!W32pThreadCallout+38
nt!PsConvertToGuiThread+174
nt!KiBBTUnexpectedRange+c
24221 -1 nt!ObfDereferenceObject+19
win32k!xxxCreateThreadInfo+3a0
win32k!UserThreadCallout+6f
win32k!W32pThreadCallout+38
nt!PsConvertToGuiThread+174
nt!KiBBTUnexpectedRange+c
---- ----------------------------------------------------------
References: 3, Dereferences 2
!obtrace 0xfa96f700 表示の主なインジケータを以下の表に示します。
パラメーター | 意味 |
---|---|
Sequence |
操作の順序を表します。 |
+/- |
参照操作または非参照操作を示します。 +1は参照操作。 -1は非参照操作を示します。 +/- n は複数の参照/非参照操作を示します。 |
PASSIVE_LEVEL よりも高い IRQL レベルのスタック・トレースを取得できるとは限らないため、x64 ベースのターゲット・コンピュータのオブジェクト参照トレースは不完全な場合があります。
CTRL+BREAK(WinDbgの場合)またはCTRL+C(KDの場合)を押すことで、いつでも実行を停止できます。