Come impedire a GCC di eliminare il codice all'interno di se il blocco (0)?Disabilitare l'eliminazione "if (0)" in gcc
Quando uso Visual Studio, una delle mie tecniche di debug è quello di mettere il codice come questo nel mio programma:
if (0)
do_some_debug_printing_and_checking();
Poi, quando un punto di interruzione viene colpito, clicco al do_some_debug_printing_and_checking() linea , seleziona "imposta la prossima istruzione" e forza l'esecuzione.
Quando utilizzo gcc/gdb come back-end, l'istruzione "next next statement" non funziona più, poiché GCC rimuove semplicemente il codice dall'interno della dichiarazione if (0).
Sono ovviamente utilizzando il flag -O0 per disabilitare l'ottimizzazione. Ho anche provato il flag -fno-dce -fno-tree-dce per disabilitare esplicitamente l'eliminazione del codice guasto, ma non ha alcun effetto: il contenuto di se (0) non è presente nel file binario e io non è possibile utilizzare impostare la prossima istruzione per saltare dentro.
C'è qualche buon modo per dire a gcc di disabilitare l'eliminazione di se (0) contenuti?
Edit:
Grazie per la soluzione alternativa "variabile aggiuntiva", tuttavia ci sono 2 cose che non mi piacciono a questo proposito:
- E 'ancora una riga aggiuntiva di codice
- Ha vinto essere ottimizzato automaticamente quando costruisco la versione di rilascio e voglio che quelle cose di debug scompaiano. Sicuramente posso usare # ifdef-s, ma sono anche più linee extra.
Davvero, non c'è assolutamente alcuna possibilità di fare in modo che GCC mantenga quel codice morto?
So che questo non è quello che stavi chiedendo, ma prova utilizzando una variabile globale impostata su false per i tuoi if. In questo modo il compilatore non ottimizzerà le tue istruzioni if. –
Perché non chiamate semplicemente do_some_debug_printing_and_checking() 'in gdb quando volete eseguire quella funzione? – Mat