2016-10-08 3 views
1

Je n'arrive pas à trouver une bonne documentation pour le format DWARF DI pour répondre à ma question. J'écris un langage qui compile en C, est-il possible de produire des informations de débogage DWARF dans le code C ou est-ce seulement l'assemblage?DWARF DI avec code C généré?

Est-il impossible d'ajouter des informations de débogage à certains (généré) code C autre que d'utiliser des choses primitives qui ne sont pas aussi bon que #line et les #file directives?

Répondre

0

Je suppose que vous allez compiler le C généré avec les informations de débogage (-g), alors vous demandez comment avoir des enregistrements DWARF supplémentaires qui décrivent votre langage de haut niveau. Approches envisageables:

(1) éditer le fichier objet pour augmenter les enregistrements DWARF pour le code C. Je ne connais pas un outil existant, peut-être faisable avec libdwarf ou pyelftools.

(2) trouver un moyen de "passer" des enregistrements DWARF supplémentaires à travers le compilateur, par ex. Un peu comme les commandes du linker peuvent être données via #pragmas. Cependant, je ne connais pas de compilateur qui supporte cela.

(3) LLVM prend en charge les enregistrements de débogage dans IR representation. Vous pouvez utiliser clang pour compiler votre C généré en IR (clang foo.c -S -emit-llvm -target arm -o foo.ll), puis augmenter foo.ll, puis générer le .o (llc foo.ll), prêt pour la liaison.

La troisième option semble être la plus facile.

+0

Merci pour les idées. Je pourrais essayer la troisième option! –

2

Cela peut être fait pour certaines choses, si vous supposez que votre compilateur peut émettre un assembly. Pour un exemple de ceci, voir my favorite gdb test case.

Normalement, cela n'est pas fait, cependant. Cela peut être difficile à faire. De nos jours, il est préférable d'écrire votre compilateur pour qu'il soit un frontal direct pour GCC ou LLVM; ou écrire des scripts auxiliaires gdb ou lldb pour simplifier le débogage du code C généré.

+0

"Cela peut être assez difficile à obtenir" - et c'est même avec la difficulté normalisée de ne pas travailler du tout avec les données du DWARF. –

+0

Ouais, ce n'est pas une solution pratique, plus comme un tour amusant. –