Известные проблемы AddressSanitizer
Примечание.
Отправьте нам отзыв о том, что вы хотите увидеть в будущих выпусках, и сообщите об ошибках при возникновении проблем.
Несовместимые параметры и функциональные возможности
Эти параметры и функциональные возможности несовместимы и /fsanitize=address
должны быть отключены или избегать.
- Параметры
/RTC
несовместимы с AddressSanitizer и должны быть отключены. - Добавочное связывание не поддерживается и должно быть отключено.
- Операция Изменить и продолжить не поддерживается, ее необходимо отключить.
- Сопрограммы несовместимы с AddressSanitizer, возобновляемые функции исключены из инструментирования.
- OpenMP не поддерживается и должен быть отключен.
- Управляемый C++ не поддерживается и должен быть отключен.
- C++ AMP не поддерживается, его необходимо отключить.
- Приложения универсальной платформы Windows (UWP) не поддерживаются.
- Файлы из списка особых случаев не поддерживаются.
- MFC , использующий необязательный
alloc_dealloc_mismatch
параметр среды выполнения, не поддерживается.
Поддержка стандартной библиотеки
Стандартная библиотека MSVC (STL) частично просвещена для понимания AddressSanitizer и предоставления других проверок. Дополнительные сведения см. в статье об ошибке переполнения контейнеров.
Если заметки отключены или в версиях без поддержки, исключения AddressSanitizer, создаваемые в коде STL, по-прежнему определяют истинные ошибки. Тем не менее, они не так точны, как они могли бы быть.
В этом примере демонстрируется отсутствие точности и преимущества включения заметок:
// 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);
// In versions prior to 17.2, 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).
// With 17.2 and later, MSVC ASan will raise a 'container-overflow' exception:
// ==18364==ERROR: AddressSanitizer: container-overflow on address 0x1263cb8a0048 at pc 0x7ff6466411ab bp 0x005cf81ef7b0 sp 0x005cf81ef7b8
v[10] = 1;
// Regardless of version, MSVC ASan DOES raise an exception here, as this write
// is out of bounds from the heap allocation.
v[20] = 1;
}
Версии Windows
Так как существуют зависимости с определенными версиями Windows, поддержка сосредоточена на Windows 10. MSVC AddressSanitizer был протестирован на 10.0.14393 (RS1) и 10.0.21323 (предварительная сборка предварительной оценки). Сообщите об ошибке при возникновении проблем.
Использование памяти
Среда выполнения AddressSanitizer не освобождает память в ОС во время выполнения. С точки зрения ОС это может выглядеть так, как утечка памяти. Это решение о проектировании намеренно, чтобы не выделять всю необходимую память заранее.
Расположения DLL среды выполнения AddressSanitizer
Файлы clang_rt.asan*.dll
среды выполнения устанавливаются рядом с компиляторами.%VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\
Эти расположения находятся на пути в сеансах отладки и в командной строке разработчика Visual Studio. Эти файлы никогда не помещаются или C:\Windows\System32
C:\Windows\SysWOW64
не помещаются.
Поддержка настраиваемого листа свойств
Окно Диспетчера свойств в интегрированной среде разработки Visual Studio позволяет добавлять пользовательские .props
файлы в проекты. Несмотря на то, что показано свойство Enable Address Sanitizer (<EnableASAN>
), сборка не учитывает ее. Это связано с тем, что пользовательские .props
файлы будут включены после Microsoft.cpp.props
этого, что использует <EnableASAN>
значение для задания других свойств.
В качестве обходного решения можно создать Directory.Build.props
файл в корневом каталоге проекта для определения <EnableASAN>
свойства. Дополнительные сведения см. в разделе "Настройка сборок C++".
См. также
Обзор AddressSanitizer
Справочник по сборке и языку AddressSanitizer
Справочник по среде выполнения AddressSanitizer
Теневой байт AddressSanitizer
Облачное или распределенное тестирование AddressSanitizer
Интеграция отладчика AddressSanitizer
Примеры ошибок AddressSanitizer