!obtrace
!obtrace 扩展显示指定对象的对象引用跟踪数据。
!obtrace Object
参数
对象
指向对象或路径的指针。
DLL
Kdexts.dll
其他信息
有关 Global Flags Utility(GFlags)的详细信息,请参阅 Windows 驱动程序工具包(WDK)文档和 Microsoft Windows 内部资料(作者:Mark Russinovich 和 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 显示的主要指示器。
参数 | 含义 |
---|---|
序列 |
表示操作顺序。 |
+/- |
指示引用或取消引用操作。 +1 指示引用操作。 -1 指示取消引用操作。 +/- n 指示多个引用/取消引用操作。 |
基于 x64 的目标计算机上的对象引用跟踪可能不完整,因为并不总是能够获得高于 PASSIVE_LEVEL 的 IRQL 级别的堆栈跟踪。
可以通过按 CTRL+BREAK(在 WinDbg 中)或 CTRL+C(在 KD 中)在任何时候停止执行。