2009-07-31 8 views
0

Je travaille actuellement sur un compilateur Java. Dans le contexte du compilateur, des entrées légèrement différentes peuvent entraîner une sortie différente (par exemple, l'ajout de final en Java permet au compilateur d'effectuer plus d'optimisations). Dans certains autres cas, des entrées différentes peuvent aboutir à la même sortie (par exemple, supprimer certaines constructions - pour chaque boucle). Lorsque je débogue comment un compilateur gère ces cas, j'exécute généralement le compilateur et essaye de comprendre où le chemin d'exécution d'exécution du compilateur diverge (ou converge). Inutile de dire que c'est très fastidieux.Débogage manipulant des entrées légèrement différentes

Je me demande si vous avez des conseils qui pourraient m'aider à déboguer ces situations.

En outre, existe-t-il un outil qui peut suivre deux exécutions de programme et vous fournir les différences du chemin d'exécution.

Répondre

2

Je travaille sur un code octet CLI -> code JIT natif, ce qui est différent, mais nous sommes confrontés à des obstacles similaires. Je mets une méthode spéciale ToString qui va imprimer l'état actuel du code octet avec la pile d'évaluation fortement typée, etc. Cela me permet d'inspecter visuellement les transformations de code à chaque étape avec un outil de comparaison de texte. Finalement, je veux faire un visualiseur de débogueur qui va "ToString" le code à chaque étape et permettez-moi de marcher en arrière/en avant directement dans le débogueur avec la mise en évidence pour les changements.

Si vous imprimez l'arborescence de syntaxe, vous pouvez la différencier de la même manière.

Édition: J'ai écrit une classe de base Annotator qui entrelace le code octet IL avec la représentation en langage assembleur du code natif généré. Il a une méthode ToHtmlString() qui me permet de tirer parti de l'HTML Visualizer intégré dans le débogueur Visual Studio. S'il vous plaît, ne critiquez pas le code ARM - j'ai juste piraté quelque chose pour que je puisse me concentrer sur l'annotateur, et maintenant que ça marche, je vais l'utiliser pour travailler sur le codegen approprié.

Clic droit → Afficher l'image si vous voulez la voir dans la bonne taille. :)

alt text http://www.280z28.org/images/vmx/2009-08-23-Annotator.png

Questions connexes