Clang имеет количество дезинфицирующих средств , которые включают проверки во время выполнения на предмет сомнительного поведения. К сожалению, все они не могут быть включены одновременно.
Невозможно объединить несколько шашек -fsanitize=address,
-fsanitize=thread
и -fsanitize=memory
в одной программе.
Что еще хуже, каждый из этих трех кажется слишком полезным, чтобы его не учитывать. AddressSanitizer проверяет ошибки памяти, ThreadSanitizer проверяет состояние гонки и MemorySanitizer проверяет неинициализированные чтения. Я беспокоюсь обо всех этих вещах!
Очевидно, что если я догадываюсь, где находится ошибка, я могу выбрать дезинфицирующее средство в соответствии с этим. Но что если я не сделаю? В дальнейшем, что если я захочу использовать дезинфицирующие средства в качестве профилактического инструмента, а не диагностического, чтобы указать на ошибки, о которых я даже не знал?
Другими словами, , учитывая, что я не ищу ничего конкретного, с каким дезинфицирующим средством, которое я должен скомпилировать по умолчанию? Должен ли я только три раза собирать и тестировать всю программу, один раз для каждый дезинфицирующее средство?