Share via


Exemplo 15: Usando o rastreamento de referência de objeto

O Rastreamento de Referência de Objeto é um recurso do Windows que registra um rastreamento de pilha sequencial quando um objeto é referenciado ou desreferenciado. Ele foi projetado para detectar erros no tratamento de objetos que podem levar a falhas ou vazamentos de memória. Alguns desses erros são difíceis de detectar porque não aparecem consistentemente. Para obter informações detalhadas, consulte Rastreamento de referência de objeto.

Você pode configurar o Rastreamento de Referência de Objeto usando a caixa de diálogo Sinalizadores Globais ou em um prompt de comando. Os exemplos a seguir usam o prompt de comando. Para obter informações sobre como usar a caixa de diálogo Sinalizadores Globais para configurar o Rastreamento de Referência de Objeto, consulte Configurando o rastreamento de referência de objeto.

Você pode usar o Gflags para habilitar, desabilitar e configurar o Rastreamento de Referência de Objeto. O processo é o seguinte:

  • Use o Gflags para habilitar o Rastreamento de Referência de Objeto no Registro ou como uma configuração de sinalizador de kernel (tempo de execução). Se você adicionar a configuração ao registro, será necessário reiniciar o computador para iniciar o rastreamento. Se você habilitar a versão de tempo de execução das configurações, o rastreamento será iniciado imediatamente, mas as configurações de rastreamento reverter àquelas na chave do Registro quando você desligar ou reiniciar o computador.

  • Inicie o processo que cria o objeto suspeito. O rastreamento inclui apenas objetos criados por processos iniciados após o início do rastreamento. Se o processo for iniciado durante ou logo após a reinicialização, adicione as configurações de rastreamento ao registro e reinicie o sistema.

  • Use aextensão de depurador!obtrace para exibir o rastreamento. Por padrão, o rastreamento é mantido até que o objeto seja destruído, mas você pode usar o parâmetro /p para manter o rastreamento até que o rastreamento seja desabilitado.

  • Use Gflags para desabilitar o Rastreamento de Referência de Objeto.no registro ou como um sinalizador de kernel (tempo de execução). Se você excluir a configuração do registro, será necessário reiniciar o computador para encerrar o rastreamento. Se você desabilitar a versão de tempo de execução das configurações, o rastreamento terminará imediatamente, mas as configurações de rastreamento reverter para as do Registro quando você desligar ou reiniciar o computador.

Esses exemplos mostram como usar o Gflags para habilitar e desabilitar o rastreamento de referência de objeto. \

Habilitar rastreamento em tempo de execução

O comando a seguir habilita o Rastreamento de Referência de Objeto no prompt de comando. O comando usa o parâmetro /ko para habilitar o Rastreamento de Referência de Objeto como um sinalizador de kernel (tempo de execução). O comando usa o parâmetro /t para especificar as marcas de pool Tag1 e Fred. Como resultado, todos os objetos criados com Tag1 ou Fred são rastreados.

gflags /ko /t Tag1;Fred

Como o comando altera as configurações do sinalizador de kernel (tempo de execução), o rastreamento de referência de objeto é iniciado imediatamente. O rastreamento incluirá todos os objetos com as marcas de pool Tag1 ou Fred que são criadas por processos que começam após o envio do comando.

O Gflags responde imprimindo a seguinte mensagem:

Running Kernel Settings :
Object Ref Tracing Enabled
        Temporary Traces
        Pool Tags: Tag1;Fred
        Process Name: All Processes

Esta mensagem indica que o Rastreamento de Referência de Objeto está habilitado. "Rastreamentos temporários" indica que todos os registros do rastreamento são excluídos quando o objeto é destruído. Para tornar o rastreamento "permanente", use o parâmetro /p , que orienta o Windows a reter os dados de rastreamento até que o Rastreamento de Referência de Objeto seja desabilitado ou o computador seja desligado ou reiniciado.

Habilitar o rastreamento no Registro

O comando a seguir adiciona uma configuração de Rastreamento de Referência de Objeto ao Registro. O rastreamento configurado começa quando você reinicia o computador.

O comando usa o parâmetro /ro para habilitar o Rastreamento de Referência de Objeto como uma configuração do Registro. O comando usa / i para especificar o processo para notepad.exe e o parâmetro /t para especificar as marcas de pool Tag1 e Fred. Como resultado, todos os objetos criados pelo processo do Bloco de Notas com as marcas de pool Tag1 ou Fred são rastreados. O comando também usa o parâmetro /p , que retém os dados de rastreamento até que o rastreamento seja desabilitado.

gflags /ro /t Tag1;Fred /i Notepad.exe /p

Quando você envia o comando, o Gflags armazena as informações no registro. No entanto, como as configurações do Registro não são eficazes até que você reinicie o computador, esse rastreamento de referência de objeto está configurado, mas ainda não foi iniciado.

O Gflags responde imprimindo a seguinte mensagem:

Boot Registry Settings :
Object Ref Tracing Enabled
        Permanent Traces
        Pool Tags: Tag1;Fred
        Process Name: Notepad.exe

A mensagem indica que o Rastreamento de Referência de Objeto está habilitado no Registro. "Rastreamentos Permanentes" indica que os dados de rastreamento serão retidos até que você desligue ou reinicie o computador. A mensagem também lista as marcas de pool e os nomes de arquivo de imagem que serão rastreados.

Exibir a configuração de rastreamento de referência de objeto

Você pode exibir a configuração rastreamento de referência de objeto que atualmente é eficaz ou é armazenada no registro a ser usado quando o computador é reiniciado.

Neste exemplo, há uma configuração de Rastreamento de Referência de Objeto armazenada no Registro e outra configurada para tempo de execução. O rastreamento em tempo de execução começa imediatamente (e substitui as configurações do Registro). No entanto, se você reiniciar o sistema, as configurações de tempo de execução serão perdidas e as configurações do Registro de sessão de Rastreamento de Referência de Objeto se tornarão eficazes.

O comando a seguir exibe a configuração de rastreamento de referência de objeto em tempo de execução. Ele usa o parâmetro /ko sem outros parâmetros.

gflags /ko
Running Kernel Settings :
Object Ref Tracing Enabled
        Temporary Traces
        Pool Tags: Tag1;Fred
        Process Name: All Processes

Se o Rastreamento de Referência de Objeto estiver habilitado, como está neste exemplo, as configurações exibidas descrevem um rastreamento que está em andamento.

O comando a seguir exibe os dados de configuração de rastreamento de referência de objeto armazenados no registro. Ele usa o parâmetro /ro sem outros parâmetros.

gflags /ro

Em resposta, o Gflags exibe os dados armazenados no registro:

Boot Registry Settings :
Object Ref Tracing Enabled
        Permanent Traces
        Pool Tags: Tag1;Fred
        Process Name: Notepad.exe

Se você reiniciou o computador desde que adicionou a configuração rastreamento de referência de objeto ao registro, as configurações exibidas em resposta a um comando gflags /ro descrevem o rastreamento que está em andamento. No entanto, se você ainda não reiniciou ou reiniciou, mas iniciou um rastreamento de referência de objeto em tempo de execução (/ko), as configurações armazenadas no registro não são efetivas no momento, mas entrarão em vigor novamente quando você reinicializar o sistema.

Desabilitar rastreamento de referência de objeto

Quando você desabilitar as configurações de rastreamento de referência de objeto de tempo de execução (sinalizador kernel), o rastreamento será interrompido imediatamente. Quando você desabilitar as configurações de Rastreamento de Referência de Objeto no Registro, o rastreamento será interrompido quando você reiniciar o computador.

O comando a seguir desabilita o Rastreamento de Referência de Objeto em tempo de execução. Ele usa o parâmetro /d para desabilitar todas as configurações. Não é possível desabilitar as configurações seletivamente.

gflags /ko -d

Quando o comando for bem-sucedido, o Gflags responderá com a seguinte mensagem:

Running Kernel Settings :
Object Ref Tracing Disabled

O comando a seguir desabilita o Rastreamento de Referência de Objeto em tempo de execução.

O comando a seguir desabilita as configurações de Rastreamento de Referência de Objeto no Registro. Ele usa o parâmetro /d para desabilitar todas as configurações. Não é possível desabilitar as configurações seletivamente. Esse comando é eficaz quando você reinicia o computador.

gflags /ro -d

Quando o comando for bem-sucedido, o Gflags responderá com a seguinte mensagem:

Boot Registry Settings :
Object Ref Tracing Disabled