Problemas conocidos de AddressSanitizer

Nota

Envíenos sus comentarios sobre lo que le gustaría ver en futuras versiones e informe de errores si tiene problemas.

Funcionalidad y opciones incompatibles

Estas opciones y funcionalidades no son compatibles /fsanitize=address con y deben deshabilitarse o evitarse.

Compatibilidad con bibliotecas estándar

La MSVC estándar (STL) no está lista para comprender AddressSanitizer. Las excepciones addressSanitizer que se inician en el código STL identifican errores verdaderos. Sin embargo, no son tan precisas como podrían ser.

En este ejemplo se muestra la falta de precisión:

// Compile with: cl /fsanitize=address /Zi
#include <vector>

int main() {   
    // Create a vector of size 10, but with a capacity of 20.    
    std::vector<int> v(10);
    v.reserve(20);

    // Currently, MSVC ASan does NOT raise an exception here.
    // While this is an out-of-bounds write to 'v', MSVC ASan
    // ensures the write is within the heap allocation size (20).
    v[10] = 1;

    // MSVC ASan DOES raise an exception here, as this write
    // is out of bounds from the heap allocation.
    v[20] = 1;
}

Windows versiones anteriores

Como hay dependencias con versiones Windows específicas, la compatibilidad se centra en Windows 10. MSVC AddressSanitizer se probó en 10.0.14393 (RS1) y 10.0.21323 (compilación insider de versión anterior). Informe de un error si se encuentra con problemas.

Uso de la memoria

El tiempo de ejecución addressSanitizer no libera memoria al sistema operativo durante la ejecución. Desde el punto de vista del sistema operativo, puede parecer que hay una pérdida de memoria. Esta decisión de diseño es intencionada, para no asignar toda la memoria necesaria por adelantado.

Ubicaciones de DLL en tiempo de ejecución de AddressSanitizer

Los clang_rt.asan*.dll archivos en tiempo de ejecución se instalan junto a los compiladores de %VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\ . Estas ubicaciones se encuentran en la ruta de acceso de las sesiones de depuración y en Visual Studio comandos del desarrollador. Estos archivos nunca se colocan en C:\Windows\System32 o C:\Windows\SysWOW64 .

Compatibilidad con hojas de propiedades personalizadas

La Administrador de propiedades del IDE Visual Studio permite agregar archivos personalizados .props a los proyectos. Aunque se muestra la propiedad Enable Address Sanitizer (), la compilación no la respeta. Esto se debe a que los archivos .props personalizados se incluyen después Microsoft.cpp.props de , que usa el valor para establecer <EnableASAN> otras propiedades.

Como solución alternativa, puede crear un Directory.Build.props archivo en la raíz del proyecto para definir la propiedad <EnableASAN> . Para obtener más información, vea Personalizar compilaciones de C++.

Consulta también

Información general de AddressSanitizer
Referencia de lenguaje y compilación de AddressSanitizer
Referencia del entorno de ejecución de AddressSanitizer
Bytes paralelos de AddressSanitizer
Nube o pruebas distribuidas de AddressSanitizer
Integración del depurador de AddressSanitizer
Ejemplos de errores de AddressSanitizer