Ejemplo 15: Usar el seguimiento de referencia de objetos
El seguimiento de referencia de objetos es una característica de Windows que registra un seguimiento secuencial de la pila cuando se hace referencia a un objeto o se desreferencia. Está diseñado para detectar errores en el control de objetos que pueden provocar bloqueos o pérdidas de memoria. Algunos de estos errores son difíciles de detectar porque no aparecen de forma coherente. Para obtener información detallada, vea Seguimiento de referencia de objetos.
Puede configurar el seguimiento de referencia de objetos mediante el cuadro de diálogo Marcas globales o en un símbolo del sistema. En los ejemplos siguientes se usa el símbolo del sistema. Para obtener información sobre cómo usar el cuadro de diálogo Marcas globales para configurar el seguimiento de referencia de objetos, vea Configurar el seguimiento de referencia de objetos.
Puede usar Gflags para habilitar, deshabilitar y configurar el seguimiento de referencia de objetos. El proceso es el siguiente:
Use Gflags para habilitar el seguimiento de referencia de objetos en el registro o como una configuración de marca de kernel (tiempo de ejecución). Si agrega la configuración al Registro, debe reiniciar el equipo para iniciar el seguimiento. Si habilita la versión en tiempo de ejecución de la configuración, el seguimiento se inicia inmediatamente, pero la configuración de seguimiento se revierte a las de la clave del Registro al apagar o reiniciar el equipo.
Inicie el proceso que crea el objeto sospechoso. El seguimiento solo incluye objetos creados por procesos que se inician después de que comience el seguimiento. Si el proceso se inicia durante o poco después de reiniciarse, agregue la configuración de seguimiento al Registro y reinicie el sistema.
Use la extensión del depurador !obtrace para ver el seguimiento. De forma predeterminada, el seguimiento se mantiene hasta que se destruye el objeto, pero puede usar el parámetro /p para mantener el seguimiento hasta que se deshabilite el seguimiento.
Use Gflags para deshabilitar el seguimiento de referencia de objetos.en el registro o como una configuración de marca de kernel (tiempo de ejecución). Si elimina la configuración del Registro, debe reiniciar el equipo para finalizar el seguimiento. Si deshabilita la versión en tiempo de ejecución de la configuración, el seguimiento finaliza inmediatamente, pero la configuración de seguimiento vuelve a las del Registro al apagar o reiniciar el equipo.
Estos ejemplos muestran cómo usar Gflags para habilitar y deshabilitar el seguimiento de referencia de objetos. \
Habilitación del seguimiento en tiempo de ejecución
El siguiente comando habilita el seguimiento de referencia de objetos en el símbolo del sistema. El comando usa el parámetro /ko para habilitar el seguimiento de referencia de objetos como una configuración de marca de kernel (tiempo de ejecución). El comando usa el parámetro /t para especificar las etiquetas de grupo Tag1 y Fred. Como resultado, se realiza un seguimiento de todos los objetos creados con Tag1 o Fred .
gflags /ko /t Tag1;Fred
Dado que el comando cambia la configuración de la marca de kernel (tiempo de ejecución), el seguimiento de referencia de objetos se inicia inmediatamente. El seguimiento incluirá todos los objetos con las etiquetas de grupo Tag1 o Fred que se crean mediante procesos que se inician después de enviar el comando.
Gflags responde imprimiendo el mensaje siguiente:
Running Kernel Settings :
Object Ref Tracing Enabled
Temporary Traces
Pool Tags: Tag1;Fred
Process Name: All Processes
Este mensaje indica que el seguimiento de referencia de objetos está habilitado. "Seguimientos temporales" indica que todos los registros del seguimiento se eliminan cuando se destruye el objeto. Para que el seguimiento sea "permanente", use el parámetro /p , que dirige a Windows para conservar los datos de seguimiento hasta que se deshabilite el seguimiento de referencia de objetos o el equipo se apague o reinicie.
Habilitación del seguimiento en el Registro
El comando siguiente agrega una configuración de seguimiento de referencia de objetos al registro. El seguimiento que configure comienza al reiniciar el equipo.
El comando usa el parámetro /ro para habilitar el seguimiento de referencia de objetos como configuración del Registro. El comando usa / i para especificar el proceso de notepad.exe y el parámetro /t para especificar las etiquetas de grupo Tag1 y Fred. Como resultado, se realiza un seguimiento de todos los objetos creados por el proceso del Bloc de notas con las etiquetas Tag1 o Fred pool. El comando también usa el parámetro /p , que conserva los datos de seguimiento hasta que el seguimiento está deshabilitado.
gflags /ro /t Tag1;Fred /i Notepad.exe /p
Al enviar el comando, Gflags almacena la información en el Registro. Sin embargo, dado que la configuración del Registro no es efectiva hasta que se reinicia el equipo, este seguimiento de referencia de objeto está configurado, pero aún no se ha iniciado.
Gflags responde imprimiendo el mensaje siguiente:
Boot Registry Settings :
Object Ref Tracing Enabled
Permanent Traces
Pool Tags: Tag1;Fred
Process Name: Notepad.exe
El mensaje indica que el seguimiento de referencia de objetos está habilitado en el Registro. "Seguimientos permanentes" indica que los datos de seguimiento se conservarán hasta que se apague o reinicie el equipo. El mensaje también enumera las etiquetas de grupo y los nombres de archivo de imagen que se realizarán en el seguimiento.
Mostrar la configuración de seguimiento de referencia de objetos
Puede mostrar la configuración de seguimiento de referencia de objetos que es efectiva actualmente o que se almacena en el Registro que se va a usar cuando se reinicia el equipo.
En este ejemplo, hay una configuración de seguimiento de referencia de objetos almacenada en el registro y otra configurada para tiempo de ejecución. El seguimiento en tiempo de ejecución comienza inmediatamente (e invalida cualquier configuración del Registro). Sin embargo, si reinicia el sistema, se pierde la configuración en tiempo de ejecución y la configuración del Registro de la sesión de seguimiento de referencia de objetos se hace efectiva.
El siguiente comando muestra la configuración de seguimiento de referencia de objetos en tiempo de ejecución. Usa el parámetro /ko sin otros parámetros.
gflags /ko
Running Kernel Settings :
Object Ref Tracing Enabled
Temporary Traces
Pool Tags: Tag1;Fred
Process Name: All Processes
Si el seguimiento de referencia de objetos está habilitado, como se muestra en este ejemplo, la configuración que se muestra describe un seguimiento que está en curso.
El comando siguiente muestra los datos de configuración de seguimiento de referencia de objetos almacenados en el Registro. Usa el parámetro /ro sin otros parámetros.
gflags /ro
En respuesta, Gflags muestra los datos almacenados en el registro:
Boot Registry Settings :
Object Ref Tracing Enabled
Permanent Traces
Pool Tags: Tag1;Fred
Process Name: Notepad.exe
Si ha reiniciado el equipo desde que agregó la configuración de seguimiento de referencia de objetos al registro, los valores que se muestran en respuesta a un comando gflags /ro describen el seguimiento que está en curso. Sin embargo, si aún no se ha reiniciado o se ha reiniciado, pero después ha iniciado un seguimiento de referencia de objetos en tiempo de ejecución (/ko), la configuración que se almacena en el registro no es efectiva actualmente, pero se volverán a aplicar al reiniciar el sistema.
Deshabilitar el seguimiento de referencia de objetos
Al deshabilitar la configuración de seguimiento de referencia de objetos en tiempo de ejecución (marca de kernel), el seguimiento se detiene inmediatamente. Al deshabilitar la configuración de Seguimiento de referencia de objetos en el Registro, el seguimiento se detiene al reiniciar el equipo.
El siguiente comando deshabilita el seguimiento de referencia de objetos en tiempo de ejecución. Usa el parámetro /d para deshabilitar toda la configuración. No se puede deshabilitar la configuración de forma selectiva.
gflags /ko -d
Cuando el comando se realiza correctamente, Gflags responde con el siguiente mensaje:
Running Kernel Settings :
Object Ref Tracing Disabled
El siguiente comando deshabilita el seguimiento de referencia de objetos en tiempo de ejecución.
El siguiente comando deshabilita la configuración de seguimiento de referencia de objetos en el Registro. Usa el parámetro /d para deshabilitar toda la configuración. No se puede deshabilitar la configuración de forma selectiva. Este comando es efectivo cuando se reinicia el equipo.
gflags /ro -d
Cuando el comando se realiza correctamente, Gflags responde con el siguiente mensaje:
Boot Registry Settings :
Object Ref Tracing Disabled