Proveedores ETW de CLR
El Common Language Runtime (CLR) tiene dos proveedores: el proveedor de runtime y el proveedor del informe detallado.
El proveedor de runtime genera eventos en función de las palabras clave (categorías de eventos) que están habilitadas. Por ejemplo, puede recopilar eventos de cargador habilitando la palabra clave LoaderKeyword.
El seguimiento de eventos para Windows (ETW) se registra en un archivo con la extensión .etl, que luego se puede procesar en archivos de valores separados por comas (.csv) si es preciso. Para obtener información sobre cómo convertir el archivo .etl en un archivo .csv, vea Controlar el registro de .NET Framework.
El proveedor en tiempo de ejecución
El proveedor en tiempo de ejecución es el principal proveedor ETW de CLR.
El GUID del proveedor en tiempo de ejecución de CLR es e13c0d23-ccbc-4e12-931b-d9cc2eee27e4.
Para obtener ejemplos sobre cómo registrar y ver eventos ETW de CLR mediante las herramientas normalmente disponibles, vea Controlar el registro de .NET Framework.
Además de utilizar las palabras clave como LoaderKeyword, puede que sea preciso habilitar palabras clave para registrar eventos que se generen con demasiada frecuencia. Las palabras clave StartEnumerationKeyword y EndEnumerationKeyword habilitan estos eventos y se resumen en CLR ETW Keywords and Levels
El proveedor de informe detallado
El proveedor del informe detallado debe estar activado para algunos usos específicos. Sin embargo, para la mayoría de los usuarios, el proveedor de runtime debe bastar.
El GUID del proveedor de informe detallado de CLR es A669021C-C450-4609-A035-5AF59AF4DF18.
Normalmente, el registro ETW se habilita antes de iniciar un proceso y el registro se desactiva al salir del proceso. Sin embargo, si se activa el registro ETW mientras el proceso se está ejecutando, se necesita información adicional sobre el proceso. Por ejemplo, para la resolución de símbolos es preciso registrar eventos de método para los métodos que ya estaban cargados antes de que se activara el registro.
Los eventos DCEnd y DCStart capturan el estado del proceso cuando se inició y detuvo la recolección de datos. (El estado hace referencia a información de alto nivel, incluidos los métodos que ya estaban compilados Just-In-Time (JIT) y los ensamblados que ya estaban cargados.) Estos dos eventos pueden proporcionar información sobre lo que pasó en el proceso; por ejemplo, qué métodos estaban compilados JIT, etc.
Solo los eventos con DC, DCStart, DCEnd o DCInit en sus nombres se provocan con el proveedor de informe detallado. Además, estos eventos solo se provocan con el proveedor de informe detallado.
Además de los filtros de palabras clave de eventos, el proveedor de informe detallado también admite las palabras clave StartRundownKeyword y EndRundownKeyword para proporcionar un filtrado concreto.
Informe detallado de inicio
Se activa un informe detallado de inicio cuando se habilita el registro con el proveedor de informe detallado mediante la palabra clave StartRundownKeyword. Esto provoca el evento DCStart y captura el estado del sistema. Antes del inicio de la enumeración, se genera el evento DCStartInit. Al final de la enumeración, se provoca el evento DCStartComplete para notificar al controlador que la recolección de datos finalizó normalmente.
Informe detallado de fin
Se activa un informe detallado de fin cuando se habilita el registro con el proveedor de informe detallado mediante la palabra clave EndRundownKeyword. El informe detallado de fin deja de generar perfiles en un proceso que continúa ejecutándose. Los eventos DCEnd capturan el estado del sistema al detener la generación de perfiles.
Antes del inicio de la enumeración, se provoca el evento DCEndInit. Al final de la enumeración, se provoca el evento DCEndComplete para notificar al consumidor que la recolección de datos finalizó normalmente. El informe detallado de inicio y de fin se utilizan principalmente para la resolución de símbolos administrados. El informe detallado de inicio puede proporcionar información de intervalos de dirección para los métodos que ya estaban compilados JIT antes de que se iniciara la sesión de generación de perfiles. El informe detallado de fin puede proporcionar información sobre intervalos de dirección de todos los métodos que se han compilado JIT cuando la generación de perfiles está a punto de desactivarse.
El informe detallado de fin no se produce automáticamente cuando se detiene una sesión de generación de perfiles. En su lugar, una herramienta que está intentando realizar una resolución de símbolos administrados tiene que invocar explícitamente una sesión de proveedor de informe detallado de CLR con la palabra clave EndRundownKeyword habilitada, justo antes de que se detenga la generación de perfiles.
Aunque el informe detallado de inicio o de fin pueden proporcionar ambos información de intervalos de dirección de métodos para la resolución de símbolos administrados, recomendamos utilizar la palabra clave EndRundownKeyword (que proporciona eventos DCEnd) en lugar de la palabra clave StartRundownKeyword (que proporciona eventos DCStart). El uso de StartRundownKeyword provoca la ejecución del informe detallado durante la sesión de generación de perfiles, lo que puede alterar el escenario de generación de perfiles.
Recolección de datos ETW mediante los proveedores en tiempo de ejecución y de informe detallado
En el siguiente ejemplo se muestra cómo utilizar el proveedor de informe detallado de CLR de una manera que permita la resolución de símbolos de procesos administrados con un impacto mínimo, sin tener en cuenta si los procesos se inician o finalizan dentro o fuera de la ventana de generación de perfiles.
Active el registro ETW mediante el proveedor en tiempo de ejecución de CLR:
xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
El registro se guardará en el archivo clr1.etl.
Para detener la generación de perfiles mientras continúa ejecutándose el proceso, inicie el proveedor de informe detallado para capturar los eventos DCEnd:
xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
Esto permite a la colección de eventos DCEnd iniciar una sesión de informe detallado. Es posible que deba esperar entre 30 y 60 segundos para recopilar todos los eventos. El registro se guardará en el archivo clr1.et2.
Desactive toda la generación de perfiles ETW:
xperf -stop clrRundown xperf -stop clr
Combine los perfiles para crear un archivo de registro:
xperf -merge -d clr1.etl clr2.etl merged.etl
El archivo merged.etl contendrá los eventos de las sesiones de los proveedores en tiempo de ejecución y de informe detallado.
Una herramienta puede ejecutar los pasos 2 y 3 (iniciando una sesión de informe detallado y finalizando la generación de perfiles) en lugar de desactivar la generación de perfiles de inmediato cuando un usuario solicita la detención de dicha generación. Una herramienta también puede ejecutar el paso 4.