Ответ 1
Я думаю, вы найдете эту вики полезной.
TL;DR Основные преимущества дезинфицирующих средств:
- намного меньшая нагрузка на процессор (Lsan практически свободен, UBsan в 1,25 раза, Asan и Msan в 2-4 раза для задач с интенсивными вычислениями и 1,05-1,1x для графических интерфейсов, Tsan в 5-15 раз)
- более широкий класс обнаруженных ошибок (стек и глобальные переполнения, использование после возврата)
- полная поддержка многопоточных приложений (шутка поддержка Valgrind для многопоточности)
Недостатки
- значительные накладные расходы памяти (до 2x для Asan, до 3x для Msan, до 10x для Tsan), что может быть ограничивающим фактором для сред с ограниченными ресурсами (например, телефонов); это все еще намного лучше, чем Valgrind
- более сложная интеграция (вам нужно научить свою систему сборки понимать Asan и иногда обходить ограничения/ошибки в самом Asan, вам также нужно использовать относительно свежий компилятор)
- MemorySanitizer на самом деле не очень удобен в настоящее время, так как требует перестройки всех зависимостей в Msan (включая все стандартные библиотеки, например, libstdc++); это означает, что случайные пользователи могут использовать Valgrind только для обнаружения неинициализированных ошибок
- дезинфицирующие средства обычно не могут быть объединены друг с другом (единственная поддерживаемая комбинация - Asan + UBsan + Lsan), что означает, что вам придется выполнять отдельные прогоны QA для выявления всех типов ошибок.