2010-04-19 3 views
1

Je dois dire à VC++ de générer des fichiers ASM pendant la compilation, ce que je n'ai jamais vraiment utilisé auparavant. Mais cela semble assez limité, comme ce sont juste des fichiers supplémentaires jetés lors de la compilation. Je pensais que peut-être le code ASM/C++ pourrait être lié, donc je peux passer de C++ directement au code ASM généré? Ou pourrait définir des points d'arrêt dans le code ASM? Est-ce possible et je ne connais pas les outils, ou est-ce la génération ASM pour l'analyse hors ligne?Comprendre la génération ASM VC++

+1

Cela va être difficile à faire parce que C++ et asm n'ont pas de représentation 1: 1. –

+0

Mais le compilateur sait exactement quel code il a généré et devrait pouvoir mapper à partir de C++ -> ASM. D'où la question, si le fichier PDB contient des données pour cela, ou le code ASM est seulement un produit secondaire. –

Répondre

2

Le fichier de langage assembleur produit par le compilateur est principalement destiné à l'analyse hors ligne. Si vous voulez par exemple définir un point d'arrêt dans le code d'assemblage généré, vous pouvez le faire. Lorsque le fichier source approprié est ouvert, cliquez avec le bouton droit de la souris et sélectionnez "Aller au démontage". Cela vous montrera le code du langage d'assemblage avec les instructions source entrelacées comme des commentaires (à peu près comme le fichier qu'il génère séparément). Vous pouvez ensuite définir des points d'arrêt sur des instructions de langage assembleur individuelles qui ont été générées à partir d'une instruction source particulière.

+0

Cela ne fonctionne vraiment que dans le mode de débogage, où l'assemblage généré n'est pas aussi éducatif que dans la version. http://stackoverflow.com/questions/563000/can-optimizations-affect-the-ability-to-debug-a-vc-app-using-its-pdb –

+1

@BlueRaja: Oui et non. Tant que vous avez généré des informations de débogage en mode release, vous pouvez toujours faire à peu près les mêmes choses. La différence est que l'optimisation globale peut réorganiser le code de sorte que vous n'obteniez plus une correspondance 1: 1 entre le code source et ce qu'il génère. –