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.
- Las
/RTCopciones no son compatibles con AddressSanitizer y deben deshabilitarse. - La vinculación incremental no es compatible y debe deshabilitarse.
- Editar y continuar no es compatible y debe deshabilitarse.
- Las coroutinas no son compatibles con AddressSanitizer y las funciones reanudables están exentas de la instrumentación.
- OpenMP no es compatible y debe deshabilitarse.
- C++ administrado no es compatible y debe deshabilitarse.
- C++ AMP no se admite y se debe deshabilitar.
- No Windows aplicaciones de plataforma universal (UWP).
- No se admiten los archivos de lista de casos especiales.
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