¿Cómo puedo evitar que GCC elimine el código dentro de si (0) bloque?Deshabilitar "if (0)" eliminación en gcc
Cuando uso de Visual Studio, una de mis técnicas de depuración es poner un código como éste en mi programa:
if (0)
do_some_debug_printing_and_checking();
Entonces, cuando se alcanzó un punto de interrupción, hago clic en el do_some_debug_printing_and_checking() línea , seleccione "establecer declaración siguiente" y forzarlo a ejecutar.
Cuando uso gcc/gdb como back-end, la "declaración set next" ya no funciona, ya que GCC simplemente elimina el código de if (0).
Por supuesto, estoy usando el -0 para deshabilitar la optimización. También probé los indicadores -fno-dce -fno-tree-dce para desactivar explícitamente la eliminación del código inactivo, pero no tiene ningún efecto: el contenido de if (0) simplemente no está presente en el archivo binario y yo no puede usar establecer la siguiente instrucción para saltar a ella.
¿Hay alguna buena manera de decirle a gcc que deshabilite la eliminación de si (0) contenido?
Editar:
Gracias por la solución "variable adicional", sin embargo, hay 2 cosas que no me gustan de él:
- sigue siendo una línea adicional de código
- Ganó No se optimiza automáticamente cuando construyo la versión de lanzamiento y quiero que esas cosas de depuración desaparezcan. Seguramente puedo usar # ifdef-s, pero eso es aún más líneas adicionales.
Realmente, no hay absolutamente ninguna opción para hacer que GCC conserve ese código muerto?
Sé que esto no es lo que pedían, pero tratar utilizando una variable global establecida en falso para su ifs. De esa forma, el compilador no optimizará tus declaraciones if. –
¿Por qué no simplemente 'llamas a do_some_debug_printing_and_checking() 'en gdb cuando quieres ejecutar esa función? – Mat