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