c++ clang clang++ compiler-flags sanitizer

c++ - ¿Por qué no se puede habilitar todos los desinfectantes?



clang clang++ (1)

Creo que el problema es que Asan y Msan quieren controlar el montón, y ambos desean reservar una gran cantidad de memoria para usar como "memoria de sombra" que rastrea las asignaciones y el uso de la memoria que usa su programa.

Ambos no pueden estar activos porque estarían tratando de rastrear la memoria utilizada por el otro desinfectante (lo que puede parecer no ser "seguro" de acuerdo con las reglas que verifica el desinfectante).

También resultaría en un uso loco de la memoria, ya que ambos desinfectantes estarían asignando memoria adicional para rastrear cada byte que usa su programa.

Tal vez en teoría podrían ser rediseñados para compartir un marco común para que puedan cooperar y no choquen, pero probablemente hay muy buenas razones prácticas por las que eso sería difícil o perjudicaría el desempeño.

Clang tiene varios desinfectantes que se pueden activar para detectar problemas en el tiempo de ejecución.
Sin embargo, hay algunos desinfectantes que no puedo usar juntos. ¿Porqué es eso?

clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=address -o main main.cpp 1 clang: error: invalid argument ''-fsanitize=address'' not allowed with ''-fsanitize=memory''

No es un gran problema, pero cuando ejecuto mis pruebas unitarias, toma más tiempo del que debería, porque he creado múltiples archivos binarios para las mismas pruebas y las ejecuto por separado.

clang++-3.9 -std=c++1z -g -fsanitize=address -o test1 test.cpp clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=undefined -o test2 test.cpp