Comment puis-je empêcher GCC d'éliminer le code à l'intérieur du bloc if(0) ?
Lorsque j'utilise Visual Studio, l'une de mes techniques de débogage consiste à mettre du code comme celui-ci dans mon programme :
if (0)
do_some_debug_printing_and_checking();
Ensuite, lorsque j'atteins un point d'arrêt, je clique sur la ligne do_some_debug_printing_and_checking(), sélectionne "définir l'instruction suivante" et la force à s'exécuter.
Lorsque j'utilise gcc/gdb en tant que back-end, la commande "définir l'instruction suivante" ne fonctionne plus, car GCC supprime simplement le code de l'intérieur de l'instruction if(0).
Je utilise bien sûr le drapeau -O0 pour désactiver l'optimisation. J'ai également essayé les drapeaux -fno-dce -fno-tree-dce pour désactiver explicitement l'élimination de code mort, mais cela n'a aucun effet : le contenu de if(0) n'est tout simplement pas présent dans le fichier binaire et je ne peux pas utiliser définir l'instruction suivante pour y accéder.
Y a-t-il un bon moyen de dire à gcc de désactiver l'élimination du contenu de if(0) ?
Éditer :
Merci pour la solution de contournement avec une "variable supplémentaire", cependant il y a 2 choses que je n'aime pas à ce sujet :
- C'est toujours une ligne de code supplémentaire
- Cela ne sera pas automatiquement optimisé lors de la construction de la version release et je veux vraiment que ces choses de débogage disparaissent. Je peux bien sûr utiliser des #ifdef, mais cela fait encore plus de lignes supplémentaires.
Vraiment, il n'y a absolument aucune option pour dire à GCC de conserver ce code mort ?