Санитайзеры C++
Санитайзер инструментирует нативную сборку и сообщает об ошибках памяти, гонках или неопределённом поведении. Он не включается в готовом редакторе обычной настр
Санитайзер инструментирует нативную сборку и сообщает об ошибках памяти, гонках или неопределённом поведении. Он не включается в готовом редакторе обычной настройкой проекта и не заменяет отладку C#.
Выбор
| Задача | Параметр сборки | Ограничение |
|---|---|---|
| Выход за границы, use-after-free | use_asan=yes | Меняет расход памяти и время выполнения |
| Неопределённое поведение C++ | use_ubsan=yes | Нужен поддерживаемый инструментарием набор проверок |
| Утечки | use_lsan=yes | Предусмотрен конфигурацией Linux/BSD; не универсальный параметр Windows |
| Гонки потоков | use_tsan=yes | Предусмотрен конфигурацией Linux/BSD; используйте отдельную сборку |
В конфигурации Windows объявлены ASAN и UBSAN, но поддержка зависит от компилятора. Не объединяйте все режимы в одной сборке: совместимость определяют платформенный detect.py и инструментарий выбранного компилятора.
Порядок работы
- Подготовьте отдельную диагностическую сборку с символами и одним нужным санитайзером. Не заменяйте ею рабочую установку.
- Запустите минимальное воспроизведение и сохраните первый отчёт целиком: тип нарушения, адрес, стек обращения и стек выделения/освобождения, если доступны.
- Исправляйте причину первого нарушения; повторный отчёт после повреждения памяти может быть следствием.
- После исправления повторите тот же сценарий и отдельно проверьте обычную сборку.
Отсутствие отчёта означает только, что выбранная проверка не обнаружила ошибку на выполненном пути. Оно не доказывает отсутствие гонок или утечек во всём проекте. Сборки с санитайзерами здесь не запускались.