Compartir por


Nube o pruebas distribuidas de AddressSanitizer

No es necesario depurar los errores AddressSanitizer cuando se producen y dónde se producen. Configure el tiempo de ejecución para crear un volcado de memoria que almacene todo el contexto específico de AddressSanitizer cuando se produzca un error. A continuación, envíe ese volcado de memoria a otro equipo para la depuración. La depuración sin conexión puede ser un protector de tiempo crítico al ejecutar AddressSanitizer en la nube o en pruebas distribuidas. Puede crear el volcado de memoria en la infraestructura de prueba o producción en la que se produce el error y depurarlo más adelante en el equipo para desarrolladores.

El depurador de Visual Studio proporciona errores de AddressSanitizer con precisión. Puede ver estos errores sin tener que volver a ejecutar pruebas, copiar grandes conjuntos de datos, detectar datos perdidos o buscar máquinas de prueba que se han desconectado. Solo tiene que cargar el volcado de memoria.

Los volcados de memoria se crean tras los errores de AddressSanitizer estableciendo la siguiente variable de entorno:

set ASAN_SAVE_DUMPS=MyFileName.dmp

Nota:

El nombre de archivo debe tener un sufijo .dmp para seguir las convenciones de nomenclatura de Visual Studio.

Este archivo de volcado de memoria se puede mostrar mediante Visual Studio en una fecha posterior en otro equipo.

Visual Studio puede mostrar la información de error en el contexto del código fuente original. Para ello, Visual Studio requiere la depuración de símbolos y el código fuente indexado. Para obtener la mejor experiencia de depuración, los archivos EXE, PDB y el código fuente que se usan para generar esos archivos binarios deben coincidir.

Para más información sobre cómo almacenar orígenes y símbolos, consulte la sección de Origen y símbolos. Para obtener información sobre los detalles de implementación y el control específico, consulte Integración del depurador.

Ejemplo: compilación, prueba y análisis

Tenga en cuenta tres máquinas: A, B y C. Las compilaciones se realizan en la máquina B, las pruebas se ejecutan en la máquina C y se analizan los errores en la máquina A. Los errores se notifican en los números de línea de origen y columna del código fuente. Puede ver la pila de llamadas junto con un conjunto de símbolos en el archivo PDB generado con esa versión exacta del código fuente.

Los pasos siguientes son para escenarios locales o distribuidos que conducen a la creación de un archivo .dmp y para ver ese archivo de volcado AddressSanitizer sin conexión.

Generación de un archivo .dmp localmente

  • Build
  • Pruebe el archivo ejecutable.
  • Copie un archivo .dmp generado en el directorio de compilación.
  • Abra el archivo .dmp con el archivo .pdb emparejado, en el mismo directorio.

Genere un .dmp en un sistema distribuido.

Nota:

La máquina de Visual Studio 2019 que se usa para el análisis debe tener acceso a GitHub o a la ubicación interna \\Machine\share donde se almacena el origen indexado.

Visualización de archivos .dmp de AddressSanitizer

  1. Asegúrese de que el IDE del depurador puede encontrar los archivos PDB y de origen.

  2. Abra Visual Studio y seleccione Continuar sin código. A continuación, seleccione Archivo>Abrir>Archivo para abrir el cuadro de diálogo Abrir archivo. Asegúrese de que el sufijo de nombre de archivo es .dmp.

    Screenshot of the File Open File menu in Visual Studio.

    La pantalla que se muestra aquí necesita un paso más para habilitar el acceso del IDE a símbolos y origen.

  3. Establezca las rutas de acceso de símbolos y, a continuación, elija Depurar solo con nativo.

    Screenshot of the Minidump Summary display in Visual Studio.

En esta captura de pantalla se muestra el archivo de volcado de carga final, con orígenes y metadatos de AddressSanitizer cargados.

Screenshot of the debugger showing source files and AddressSanitizer metadata.

Origen y símbolos

El servidor de origen permite a un cliente recuperar la versión exacta de los archivos de origen usados para compilar una aplicación. El código fuente de un archivo ejecutable o DLL puede cambiar con el tiempo y entre versiones. Puede usarlo para ver el mismo código fuente que creó una versión determinada de la aplicación.

Al depurar un EXE con su archivo PDB, el depurador puede usar el bloque de datos del servidor de origen incrustado para recuperar los archivos adecuados del control de código fuente. Carga los archivos que se asignan a los nombres completos que se colocan automáticamente en la PDB mediante la opción del compilador /Zi.

Para usar el servidor de origen, la aplicación debe ser "indexada de origen" mediante pdbstr.exe para escribir un bloque de datos srcsrv en el archivo PDB. Para más información, consulte la sección Bloque de datos del servidor de origen y la indexación de origen. También encontrará útiles los pasos para indexar orígenes y publicar símbolos y cómo especificar símbolos y código fuente para el depurador.

Para obtener documentación externa, consulte:

Consulte también

Introducción a AddressSanitizer
Problemas conocidos de AddressSanitizer
Referencia de lenguaje y compilación de AddressSanitizer
Referencia del entorno de ejecución addressSanitizer
Bytes de sombra addressSanitizer
Integración del depurador AddressSanitizer
Ejemplos de errores addressSanitizer