Compartir a través de


Compatibilidad con símbolos

Cuando Windows Analizador de rendimiento (WPA) está configurado correctamente, WPA muestra nombres simbólicos de los archivos de símbolos para las direcciones que se encuentran en la grabación.

Para descodificar símbolos, las herramientas deben localizar los archivos de base de datos del programa, conocidos como archivos de base de datos de programa (PDB) o archivos de símbolos, para crear pilas de llamadas completas. El compilador y el enlazador generan archivos PDB cuando el sistema compila un componente. Microsoft proporciona los archivos de base de datos del programa para muchos productos de Microsoft en un servidor de símbolos en línea. Las herramientas de depuración de Microsoft para Windows y WPA usan el servidor de símbolos en línea para buscar información de símbolos. Por lo tanto, el equipo debe estar conectado a Internet si los archivos de símbolos no se copian localmente. Windows Performance Toolkit usa la misma infraestructura de descodificación de símbolos que el depurador de Windows, Windbg.exe. Para obtener más información, consulte WinDbg.

Para configurar la compatibilidad con símbolos, debe definir la variable de entorno _NT_SYMBOL_PATH . En el ejemplo siguiente se establece la ruta de acceso de símbolos para usar el servidor de símbolos públicos de Microsoft junto con un almacén de bajada en C:\symbols:

set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols

Tenga en cuenta que este ejemplo es una sola línea de comandos.

La dirección URL de esta ruta de acceso de símbolos especifica el servidor de símbolos de Microsoft en línea. La ruta de acceso entre los asteriscos (C:\symbols) especifica el almacén de bajada. Se trata de una caché local en la que el sistema de resolución de símbolos mantiene los archivos de símbolos. Las herramientas WPA también descodifican símbolos de los componentes que desarrolla. Agregue una o varias rutas de acceso a _NT_SYMBOL_PATH que contengan los archivos PDB para los componentes que desea registrar. Por ejemplo, en el ejemplo siguiente se muestra cómo se configuró la ruta de acceso para el ejemplo anterior:

set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*

Cuando Xperf o WPA descodifica símbolos, Xperf o WPA almacena en caché una versión condensada de los archivos de símbolos originales o PDB, en el disco del directorio \symcache . Para ello, Xperf o WPA usa los símbolos que están disponibles en el momento. Los símbolos del sistema operativo que están disponibles fuera de Microsoft son símbolos públicos. Estos símbolos contienen menos información que los símbolos privados internos. En las pruebas de caja negra, los símbolos públicos también pueden incluir información incorrecta. Los símbolos privados, que son más confiables, se pueden obtener en virtud de acuerdos de no divulgación. Si un usuario ha descodificado una grabación mediante símbolos públicos y, a continuación, obtiene símbolos privados, el usuario debe borrar el directorio \symcache antes de que Xperf o WPA puedan detectar los nuevos símbolos privados.

Solución de problemas de descodificación de símbolos

La compatibilidad con la descodificación de símbolos es compleja. Se deben cumplir los requisitos siguientes:

  • Debe especificar -symbols en la línea de comandos Xperf o seleccionar Cargar símbolos en el menú Seguimiento en WPA después de abrir una grabación.

  • Las variables de entorno deben configurarse correctamente. Para obtener más información sobre Xperf, consulte símbolos.

  • El archivo de grabación del kernel ETW debe haberse detenido y combinado correctamente. Para obtener más información, vea Detener una grabación.

  • Windows Performance Recorder (WPR) o WPA combina el archivo de grabación de usuario ETW junto con un archivo de grabación de kernel que se toma al mismo tiempo en el mismo equipo.

  • Debe tener acceso a los orígenes binarios y de símbolos que _NT_SYMBOL_PATH especifica. Si usa un servidor de símbolos, el servidor de símbolos suele ser simplemente un redirector. En este caso, debe tener acceso tanto al servidor de símbolos como a los sitios a los que apunta el servidor de símbolos a ese host de los archivos binarios y los símbolos.

  • _NT_SYMBOL_PATH debe apuntar a los archivos correctos. Si los archivos existen desde otra compilación o arquitectura, los archivos no funcionarán. Si la versión de los archivos binarios de la aplicación no es la misma versión que los símbolos a los que _NT_SYMBOL_PATH apunta, no podrá ver las pilas de llamadas.

    Para descartar un error de coincidencia de símbolos, use Symchk.exe de la distribución Herramientas de depuración para Windows para asegurarse de que los símbolos coinciden con los archivos de símbolos del equipo en el que se realizó la grabación. Por ejemplo:

    symchk /v <local_file> /s <sympath_to_name.pdb>
    

    Para descartar una discrepancia binaria, use el fc /b comando para asegurarse de que los archivos binarios del equipo en el que se tomó la grabación coinciden con los archivos binarios del recurso compartido de colocación. Por ejemplo:

    fc /b <local_file> <drop_share_file>
    
  • En Xperf, debe capturar la grabación del kernel ETW mediante al menos las PROC_THREAD+LOADER marcas . Estas marcas proporcionan información básica sobre la duración del proceso y los intervalos de direcciones virtuales de imagen en la memoria del proceso. Esta información ayuda a XPerf a descodificar direcciones virtuales a imágenes y símbolos.

    Para comprobar que estas marcas se han habilitado en la grabación del kernel de ETW, compruebe que los eventos Xperf -process (Create, Delete, Start Rundown, End Rundown) y Image (Load, Unload, Start Rundown, End Rundown) están presentes en la tabla que se genera mediante el siguiente comando:

    xperf -i kernel.etl -a tracestats -detail
    

    Nota Es posible que todos estos eventos no aparezcan en la tabla, en función de si se han producido estos eventos.

Limitación en la descodificación de símbolos Xperf

Xperf tiene como valor predeterminado la unidad del sistema si no se especifica una unidad para una imagen ejecutable (como \Path\Library.dll). Al ejecutar el -d/-merge comando , si Xperf no encuentra una imagen ejecutable que existía en un proceso en ejecución durante la grabación, Xperf no puede recuperar la información de identidad del archivo de símbolos y la imagen correspondientes y agregar la información a la grabación combinada. Sin esa información, Xperf no puede realizar la descodificación de símbolos para esa imagen en esa grabación.

Este problema no afecta a otras rutas de acceso de archivo, como las rutas de acceso de E/S de disco o E/S de archivos.

Para habilitar la descodificación de símbolos y ayudar a habilitar la carga de imágenes correcta y descargar rutas de acceso en las grabaciones ETW de Xperf, debe almacenar todas las imágenes ejecutables para las que puede requerir la descodificación de símbolos o la carga de imágenes y descargar rutas de acceso en la unidad del sistema. A continuación, ejecute las imágenes desde esa unidad. Si esto no es posible, cree un reflejo de las imágenes en la unidad del sistema, incluso si ejecuta las imágenes desde otra unidad. Por ejemplo, si C: es la unidad del sistema, cree una copia idéntica de D:\game\bin\binkw32.dll en C:\game\bin\binkw32.dll.

Kit de herramientas de rendimiento de Windows

Símbolos

Uso de la compatibilidad con CLR 4.0 NGEN PDB

Problemas comunes de análisis de In-Depth