Comment désactiver les optimisations des compilateurs dans gcc?
j'essaie d'apprendre le langage de l'Assemblée. J'ai cherché et trouvé comment démonter un fichier .c
mais je pense qu'il produit une version optimisée du programme. Y a-t-il un moyen pour que je puisse voir le code d'assemblage exact qui correspond à mon fichier C.
5 réponses
l'option gcc -O
permet différents niveaux d'optimisation. Utilisez -O0
pour les désactiver et utilisez -S
pour l'assemblage de sortie. -O3
est le plus haut niveau d'optimisation.
à partir de gcc 4.8 le niveau d'optimisation -Og
est disponible. Il permet des optimisations qui n'interfèrent pas avec le débogage et est recommandé par défaut pour le cycle d'édition-compilation-débogage standard.
Pour changer le dialecte de l'ensemble à intel ou att utiliser -masm=intel
ou -masm=att
.
Vous pouvez également activer certaines optimisations manuellement avec -fname
.
regardez le manuel gcc pour beaucoup plus.
pour gcc vous voulez omettre toutes les options - O1-O2 ou - O3 passées au compilateur ou si vous les avez déjà, vous pouvez ajouter l'option - o0 pour l'éteindre à nouveau. Il pourrait également vous aider à ajouter -g pour le débogage afin que vous puissiez voir la source c et le code machine démonté dans votre débogueur.
voir aussi: http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
Pour tester sans copie élision et de vous voir de copier/déplacer des constructeurs/opérateurs de l'action ajouter "-fno-éluder-constructeurs".
même sans optimisations (-O0 ), GCC et Clang vont toujours copier elision, ce qui a pour effet de sauter les constructeurs copy/move dans certains cas. Voir cette question pour les détails sur la copie décision.
cependant, dans Clang 3.4 il déclenche un bug (un objet temporaire invalide sans calling constructor), qui est fixé en 3.5.
vous pouvez désactiver les optimisations si vous passez-O0 avec la ligne de commande gcc.
E. G. tourner un .C fichier dans un .S appel de fichier:
gcc-o0-s test.c