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 manuseio 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 de forma consistente. 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 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, deverá 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 serão revertidas para as da 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 que são 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 a extensão do 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 Object Reference Tracing.no registro ou como uma configuração de sinalizador de kernel (tempo de execução). Se você excluir a configuração do Registro, deverá reiniciar o computador para encerrar o rastreamento. Se você desabilitar a versão de tempo de execução das configurações, o rastreamento será encerrado imediatamente, mas as configurações de rastreamento serão revertidas para aquelas no 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 uma configuração de 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 do 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 criados por processos que são iniciados 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

Essa mensagem indica que o Rastreamento de Referência de Objeto está ativado. "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 direciona o Windows para reter os dados de rastreamento até que o Rastreamento de Referência de Objeto seja desabilitado ou o computador seja desligado ou reiniciado.

Habilitar rastreamento no registro

O comando a seguir adiciona uma configuração de Rastreamento de Referência de Objeto ao Registro. O rastreamento que você configura 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 o /i para especificar o processo para notepad.exe e o parâmetro /t para especificar as tags 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 efetivas 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 arquivos de imagem que serão rastreados.

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

Você pode exibir a configuração do Rastreamento de Referência de Objeto que está atualmente em vigor ou armazenada no Registro para ser usada quando o computador for reiniciado.

Neste exemplo, há uma configuração de Rastreamento de Referência de Objeto armazenada no registro e uma configuração diferente configurada para tempo de execução. O rastreamento de tempo de execução começa imediatamente (e substitui todas 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 da sessão de Rastreamento de Referência de Objeto entrarão em vigor.

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 neste exemplo, as configurações exibidas descreverão um rastreamento que está em andamento.

O comando a seguir exibe os dados de configuração do 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 tiver reiniciado ou tiver reiniciado, mas iniciado um rastreamento de referência de objeto em tempo de execução (/ko), as configurações armazenadas no Registro não estarão em vigor no momento, mas entrarão em vigor novamente quando você reinicializar o sistema.

Desativar rastreamento de referência de objeto

Quando você desabilita as configurações de Rastreamento de Referência de Objeto em tempo de execução (sinalizador de kernel), o rastreamento é interrompido imediatamente. Quando você desabilita as configurações de Rastreamento de Referência de Objeto no Registro, o rastreamento é interrompido quando você reinicia 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. Você não pode desativar as configurações seletivamente.

gflags /ko -d

Quando o comando é bem-sucedido, o Gflags responde 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. Você não pode desativar as configurações seletivamente. Esse comando é eficaz quando você reinicia o computador.

gflags /ro -d

Quando o comando é bem-sucedido, o Gflags responde com a seguinte mensagem:

Boot Registry Settings :
Object Ref Tracing Disabled