Compartir a través de


Biblioteca de funcionalidad extendida AddressSanitizer de Visual Studio (VCAsan)

Las bibliotecas VCAsan*.lib implementan características extendidas del IDE del depurador en Visual Studio. Estas características permiten al IDE mostrar errores de AddressSanitizer en sesiones de depuración en directo, o sin conexión al guardar un archivo de volcado de memoria con metadatos. La biblioteca se vincula cada vez que el compilador de MSVC habilita AddressSanitizer.

Inventario de bibliotecas de VCAsan

Opción de runtime Biblioteca de vínculos VCAsan
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

Características de la biblioteca VCAsan

Ventana de informe de errores de AddressSanitizer enriquecido en el IDE de Visual Studio

La biblioteca VCAsan registra una devolución de llamada en el entorno de ejecución de AddressSanitizer mediante la función de interfaz __asan_set_error_report_callback. Si se genera un informe de AddressSanitizer, esta devolución de llamada se usa para producir una excepción detectada por Visual Studio. Visual Studio usa los datos de excepción para generar el mensaje que se muestra al usuario en el IDE.

Nota:

La biblioteca VCAsan registra una función de devolución de llamada en el entono de ejecución de AddressSanitizer. Si el código llama a esta función de registro por segunda vez, sobrescribe el registro de devolución de llamada de la biblioteca VCAsan. Esto da lugar a la pérdida de toda la integración del IDE de Visual Studio. Volverá a la experiencia de usuario del IDE predeterminada. También es posible que se pierda la llamada de un usuario que registra su devolución de llamada. Si encuentra algún problema, presente un error.

Guardar los errores de AddressSanitizer en un nuevo tipo de archivo de volcado de memoria

Al vincular la biblioteca VCAsan al archivo ejecutable, los usuarios pueden habilitarla para generar un volcado de memoria en tiempo de ejecución. A continuación, el entorno de ejecución de AddressSanitizer genera un archivo de volcado de memoria cuando se produce un error diagnosticado. Para habilitar esta característica, el usuario establece la variable de entorno ASAN_SAVE_DUMPS mediante un comando como este:

set ASAN_SAVE_DUMPS=MyFileName.dmp

El archivo debe tener una .dmp extensión para seguir las convenciones del IDE de Visual Studio. (Antes de la versión 17.7)

Esto es lo que sucede cuando se especifica un archivo de volcado de memoria para ASAN_SAVE_DUMPS: si el entorno de ejecución de AddressSanitizer detecta un error, guarda un archivo de volcado de memoria que tiene los metadatos asociados al error. El depurador de Visual Studio, versión 16.9 y posteriores, puede analizar los metadatos guardados en el archivo de volcado de memoria. Puede establecer ASAN_SAVE_DUMPS por prueba, almacenar estos artefactos binarios y, luego, verlos en el IDE con la indexación de origen adecuada.

Visual Studio, versión 17.7 y posteriores, admite lo siguiente:

  • Las cadenas entre comillas ahora se controlan correctamente. En versiones anteriores, para entornos dentro de Visual Studio o al usar PowerShell, establecer la variable de entorno para que contenga comillas o espacios no podría crear el archivo de volcado esperado.

  • Cuando se especifica explícitamente la .dmp extensión (por ejemplo, set ASAN_SAVE_DUMPS=MyDmp.dmp), VCAsan la usa explícitamente y no agregará un identificador de proceso asociado al nombre de archivo de volcado.

  • Si ya existe un .dmp archivo con el mismo nombre especificado desde la variable de entorno, VCAsan modifica el nombre de archivo de la siguiente manera:

    • Anexa un número al nombre de archivo entre paréntesis. Por ejemplo, Myfile (1).dmp.
    • Si después de varios intentos de anexar un número entre paréntesis no se puede generar un nombre único, el archivo se guarda en una %APPLOCAL% ruta de acceso temporal que vcAsan imprimirá. Por ejemplo, C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • Si se produce un error al guardar en una ruta de acceso temporal, se muestra un error de diagnóstico.

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
Pruebas distribuidas o en la nube addressSanitizer
Ejemplos de errores addressSanitizer