10
votes

Déboguer un laissez-passer LLVM avec GDB

est-il possible de déboguer une passe LLVM à l'aide de GDB? Je ne pouvais trouver aucun doctorat sur le site LLVM.


0 commentaires

3 Réponses :


8
votes

Oui. Construisez LLVM en mode sans libération (la valeur par défaut). Il faut un peu plus longtemps qu'une version de sortie, mais vous pouvez utiliser GDB pour déboguer le fichier d'objet résultant.

Une note de prudence: je devais mettre à niveau ma boîte Linux vers 3 Go de mémoire pour créer des temps de liaison de mode de débogage LLVM raisonnables.


2 commentaires

Mais puis-je déboguer une passe LLVM? Les passes LLVM sont généralement exécutées à l'aide d'opter pour que je ne sait pas utiliser GDB pour l'exécuter. Pouvez-vous me dire la commande?


Vous pouvez exécuter E.g. "GDB / USR / local / bin / opt" et tapez "exécutez ".



1
votes

Après la suite des conseils de Richard Penningtons + Ajout de backticks fonctionne pour moi: xxx

puis tapez xxx

Note: J'aurais commenté, mais ne pouvait pas (République manquant)


0 commentaires

6
votes

D'abord Assurez-vous que LLVM est compilé avec les options de débogage activées, qui est fondamentalement le paramètre par défaut. Si vous ne compilez pas compilé LLVM avec des options non par défaut, votre construction actuelle devrait être bien.

Tous les passes LLVM sont exécutés à l'aide de l'outil OPT code> (optimiseur) de LLVM. Les passes sont compilées dans des fichiers d'objet partagés, c'est-à-dire llvmhello.so code> fichier dans Build / lib code> puis chargé par l'outil opt code>. Pour debug ou une étape du passage que nous devons arrêter LLVM avant qu'il ne commence à exécuter le .so code> car il n'y a aucun moyen de mettre dans un fichier objet partagé un point de rupture. Au lieu de cela, nous pouvons mettre une pause dans le code avant em> il invoque la passe. P>

Nous allons mettre un point d'arrêt dans LLVM / LIB / IR / PASS. cpp code> p>

Voici comment faire: p>

  1. naviguer vers la construction / bac et ouvrir la borne et tapez gdb opt code>. Si vous compilez LLVM avec les symboles de débogage ajoutés, alors GDB prendra du temps pour charger des symboles de débogage, sinon GDB dira charger des symboles de débogage ... (aucun symbole de débogage trouvé) code>. P> li>

  2. Maintenant, nous devons définir un point de pause au Void Pass :: PRÉPARCEPASSMANAGER (PMStack &) Code> Méthode dans Pass.cpp code>. Ceci est probablement le premier (ou l'une des premières méthodes) impliquées dans le chargement du col. Vous pouvez le faire en tapant pause LLVM :: Pass :: preparpePassManager code> dans le terminal. P> li>

  3. L'exécution de la passe. J'ai un fichier de bitcode appelé essai.bc code> et le même llvmhello.so code> passe donc donc je l'exécute avec p>

    run -load ~/llvm/build/lib/LLVMHello.so  -hello < ~/llvmexamples/trial.bc > /dev/null
    


2 commentaires

Bonjour, je pense que je n'ai pas ajouté de symboles de débogage tout en construisant LLVM. Puis-je toujours utiliser GDB pour le débogage? Cela aura-t-il des limitations sur le débogage?


Il ne devrait y avoir aucun problème.