!obtrace

A extensão !obtrace exibe dados de rastreamento de referência do objeto especificado.

!obtrace Object

Parâmetros

Objeto
Um ponteiro para o objeto ou um caminho.

DLL

Kdexts.dll

Informações Adicionais

Para mais informações sobre o utilitário Sinalizadores Globais (GFlags), consulte a documentação do Kit de Driver do Windows (WDK) e o livro Microsoft Windows Internals de Mark Russinovich e David Solomon.

Comentários

O recurso de rastreamento de referência de objeto do Windows registra rastreamentos de pilha sequencial sempre que um contador de referência de objeto é aumentado ou diminuído.

Antes de usar essa extensão para exibir dados de rastreamento de referência de objeto, é necessário usar GFlags para habilitar o rastreamento de referência do objeto especificado. É possível ativar o rastreamento de referência de objeto como uma configuração de sinalizador do kernel (tempo de execução), na qual a alteração é efetiva de forma imediata, mas desaparece se desligar ou reiniciar. Ou como uma configuração de registro, que requer uma reinicialização, mas permanece efetiva até que seja alterada.

Veja a seguir um exemplo da saída da extensão !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

Os principais indicadores na exibição !obtrace 0xfa96f700 estão listados na tabela a seguir.

Parâmetro Significado

Sequência

Representa a ordem das operações.

+/-

Indica uma operação de referência ou desreferência.

+1 indica uma operação de referência.

-1 indica uma operação de desreferência.

+/- n indica operações múltiplas de referência/desreferência.

Os rastreamentos de referência de objeto em computadores de destino baseados em x64 podem estar incompletos porque nem sempre é possível adquirir rastreamentos de pilha em níveis de IRQL superiores a PASSIVE_LEVEL.

É possível interromper a execução a qualquer momento pressionando CTRL+BREAK (no WinDbg) ou CTRL+C (no KD).