He visto publicaciones sobre que causan diferencias entre las compilaciones Debug y Release, pero no creo que nadie haya abordado desde el punto de vista del desarrollo cuál es la forma más eficiente de resolver el problema.¿Mejores prácticas y herramientas para eliminar las diferencias entre compilaciones de Debug y Release?
Lo primero que hago cuando aparece un error en la compilación Release pero no en Debug es ejecutar mi programa a través de valgrind con la esperanza de un mejor análisis. Si eso no revela nada, - y esto me ha pasado antes - entonces pruebo varias entradas con la esperanza de hacer que el error surja también en la compilación Debug. Si eso falla, entonces trataría de rastrear los cambios para encontrar la versión más reciente para la cual las dos compilaciones difieren en comportamiento. Y finalmente, supongo que recurriría a las declaraciones impresas.
¿Existen mejores prácticas de ingeniería de software para la depuración eficiente cuando difieren las versiones de depuración y liberación? Además, ¿qué herramientas hay que operen en un nivel más fundamental que valgrind para ayudar a depurar estos casos?
EDIT: Observé muchas respuestas que sugieren algunas buenas prácticas generales, como las pruebas unitarias y las pruebas de regresión, que acepto son excelentes para encontrar cualquier error. Sin embargo, ¿hay algo específicamente adaptado a este problema de liberación frente a depuración? Por ejemplo, ¿hay algo así como una herramienta de análisis estático que dice "Oye, esta macro o este código o esta práctica de programación es peligrosa porque tiene el potencial de causar diferencias entre tus compilaciones de depuración/versión?"
Con VC, puede instrumentar las compilaciones de lanzamiento con información de depuración y depurarlas también. No hay mucha diversión en recorrer el código optimizado, pero tienes una buena posibilidad de encontrar errores de esa manera. – sbi
Correcto, se me olvida que también puede compilar información de depuración en la versión de lanzamiento con gcc. – Eric