Desafortunadamente, no hay manera de manera de detectar todos UB. Tendría que resolver el problema de detención para hacer eso.
Lo mejor que puede hacer es saber que muchas de las reglas como sea posible, mirar hacia arriba cuando está en duda, y consultar con otros programadores (a través de la programación en parejas, las revisiones de código o pregunta sólo SO)
La compilación con tantas advertencias como sea posible y bajo múltiples compiladores puede ayudar. Y ejecutar el código a través de herramientas de análisis estáticas como Valgrind puede detectar muchos problemas.
Pero, en última instancia, ninguna herramienta puede detectarlo todo.
Un problema adicional es que muchos programas realmente tienen que confiar en UB. Algunas API lo requieren, y solo asumen que "funciona en todos los compiladores".OpenGL lo hace en uno o dos casos. La API Win32 ni siquiera se compilará bajo un compilador compatible con los estándares.
Por lo tanto, incluso si tuviera una herramienta mágica de detección de UB, aún así se dispararía por los casos que no están bajo su control.
99%? Falsa sensación de seguridad. Un buen compilador puede atrapar más problemas que uno malo, pero todavía es solo una fracción de todos los casos posibles. – jalf