Rastreamento de referência de objeto

O recurso Rastreamento de Referência de Objeto registra rastreamentos de pilha sequenciais sempre que um contador de referência de objeto é incrementado ou decrementado. Os rastreamentos podem ajudá-lo a detectar erros de referência de objeto, incluindo desreferência dupla, falha na referência e falha na desreferência de objetos. Esse recurso tem suporte apenas no Windows Vista e em versões posteriores do Windows.

Para obter informações sobre como configurar o recurso rastreamento de referência de objeto na caixa de diálogo Sinalizadores Globais , consulte Configurando o rastreamento de referência de objeto. Para obter informações sobre como configurar o recurso rastreamento de referência de objeto no prompt de comando, consulte Comandos GFlags. Para obter um exemplo, consulte Exemplo 15: usando o rastreamento de referência de objeto.

Os rastreamentos de referência de objeto são mais úteis quando você suspeita que um objeto específico não está sendo referenciado ou desreferenciado corretamente, normalmente porque o aumento do uso do pool indica que um objeto está vazando ou um processo ou sessão não pode ser encerrado, mesmo que sua contagem de identificadores seja zero. Ao contrário dos rastreamentos registrados em logs para revisão posterior, os rastreamentos de referência de objeto são projetados para serem usados em tempo real, enquanto o processo está em execução e o objeto está sendo referenciado e desreferenciado. Você exibe um rastreamento de referência de objeto no depurador usando a extensão do depurador !obtrace. Como essa extensão requer um endereço de objeto especificado, você deve saber com antecedência qual objeto é a fonte provável do erro.

As seguintes regras se aplicam ao Rastreamento de Referência de Objeto:

  • Você pode executar apenas um rastreamento de referência de objeto por vez.

  • Como um rastreamento em todo o kernel não é prático, você deve limitar o rastreamento a objetos criados com marcas de pool especificadas ou a objetos criados por um processo especificado (indicado por um nome de arquivo de imagem) ou ambos.

  • Você pode especificar apenas um arquivo de imagem para cada rastreamento. Se você especificar um arquivo de imagem, o rastreamento será limitado a objetos criados pelos processos que a imagem representa. Objetos referenciados pelo processo, mas criados por um processo diferente, não são rastreados.

  • Você pode especificar um máximo de 16 marcas de pool para cada rastreamento. Objetos com qualquer uma das marcas de pool especificadas são rastreados.

  • Se você especificar um arquivo de imagem e uma ou mais marcas de pool, o rastreamento será limitado a objetos que são criados pelo processo e têm qualquer uma das marcas de pool especificadas.

  • O Rastreamento de Referência de Objeto não pode rastrear processos que já estão em execução quando um rastreamento é iniciado. O rastreamento inclui apenas os objetos de processos que começam após o início do rastreamento.

  • Objetos marcados para rastreamento são rastreados até que o objeto seja destruído ou o rastreamento seja desabilitado. Por padrão, os rastreamentos de um objeto são mantidos somente até que o objeto seja destruído, mas você pode especificar um rastreamento "permanente" (/p) em que o rastreamento é retido até que o rastreamento seja desabilitado.

  • Você pode armazenar a configuração rastreamento de referência de objeto como uma configuração de registro ou um sinalizador de kernel (tempo de execução). Se você tiver configurações de sinalizador de registro e kernel, as configurações de tempo de execução terão precedência, mas serão perdidas quando você desligar ou reiniciar o computador.