2015-03-09 1 views
2

Dire que j'ai le code comme ceci (notez que dans l'éditeur, je peux voir les numéros de ligne)Dump Assemblée de donnée C++ ligne (s)

//File example_optimization.cpp 

#1 int spreadi = (d_ai - d_bi); 
#2 int transactionCosti = spreadi/(spreadi < 10 ? 1 : 10); 

Si le compilateur est un compilateur optimisé et les drapeaux corrects sont définis , Je veux me prouver que la division par 1 n'a pas réellement lieu.

est-il un outil sous Linux (ou une combinaison d'outils qui peuvent être utilisés par un tuyau) où je peux dire quelque chose comme:

ctoassembler -c g++ -l 1 2 example_optimization.cpp 

donc cette commande dit, appelez ctoassembler compilateur utilisation et éditeur de liens gnu g ++ et les lignes de vidage 1 à 2 du fichier C++ example_optimization.cpp. La valeur par défaut est de sortir le code de l'assembleur vers stdout.

Je me fiche de l'utilisation. Je suis intéressé à pouvoir voir ce que mon code est transformé par un compilateur sans avoir à le chercher moi-même. Cela ne me dérange pas d'utiliser des fichiers objets si cela le facilite, mais il est préférable d'afficher le code source C++ et le code assembleur correspondant côte à côte.

Répondre

1

GCC arrêtera les fichiers assembleur produits:

S arrêter après l'étape de la compilation appropriée; ne pas assembler. La sortie est sous la forme d'un fichier de code assembleur pour chaque fichier d'entrée non-assembleur spécifié. Par défaut, le fichier assembleur d'un fichier source est créé en remplaçant le suffixe '.c', '.i', etc. par '.s'.

Les fichiers d'entrée qui ne nécessitent pas de compilation sont ignorés.

Source: https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options

Votre autre option est juste pour déboguer le programme et jeter un oeil à l'assembleur.

1

Exécutez le code via gdb, en mettant un point d'arrêt sur la ligne de C que vous voulez, exécutez, puis tapez disassemble pour afficher les lignes de code suivantes.

+0

Bien, merci. – Ivan