2010-02-09 4 views

Répondre

5

Oui. Construire LLVM en mode non-version (la valeur par défaut). Cela prend un peu plus de temps qu'une compilation de version, mais vous pouvez utiliser gdb pour déboguer le fichier objet résultant. Une note d'avertissement: J'ai dû mettre à jour ma machine Linux à 3 Go de mémoire pour que les temps de liaison du mode de débogage LLVM soient raisonnables.

+0

Les passes LLVM sont généralement exécutées à l'aide de opt, donc je ne sais pas comment utiliser gdb pour l'exécuter. Pouvez-vous me dire la commande? –

+0

Vous pouvez exécuter par ex. "gdb/usr/local/bin/opt" et tapez "exécuter ". –

+1

http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name

0

Après Richard Pennington conseils + ajoutant des accents graves fonctionne pour moi:

gdb /usr/local/bin/opt 

puis tapez

run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null` 

Note: (. Rep manquant) j'aurais commenté, mais n'a pas pu

2

Assurez-vous d'abord que LLVM est compilé avec les options de débogage activées, ce qui est fondamentalement le paramètre par défaut. Si vous n'avez pas compilé LLVM avec des options autres que celles par défaut, votre version actuelle devrait fonctionner correctement.

Tous les passages LLVM sont exécutés à l'aide de l'outil opt (optimiseur) de LLVM. Les laissez-passer sont compilés dans des fichiers objets partagés, c'est-à-dire LLVMHello.so dans build/lib, puis chargés par l'outil opt. Pour déboguer ou franchir la passe, nous devons arrêter LLVM avant de commencer à exécuter le fichier .so car il est impossible de placer un point d'arrêt dans un fichier objet partagé. Au lieu de cela, nous pouvons mettre une pause dans le code avant il invoque la passe.

Nous allons mettre un point d'arrêt dans llvm/lib/IR/Pass.cpp

Voici comment faire:

  1. Naviguer à construire/bin et le terminal ouvert et tapez gdb opt. Si vous avez compilé llvm avec les symboles de débogage ajoutés, gdb mettra un certain temps à charger les symboles de débogage, sinon gdb dira loading debugging symbols ... (no debugging symbols found). Maintenant, nous devons définir un point de rupture à la méthode void Pass::preparePassManager(PMStack &) dans Pass.cpp. C'est probablement la première (ou l'une des premières) méthodes impliquées dans le chargement de la passe. Vous pouvez le faire en tapant break llvm::Pass::preparePassManager dans le terminal.

  2. Exécution de la passe. J'ai un fichier appelé code binaire trial.bc et même LLVMHello.so passe donc je le dirige avec

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

    gdb va maintenant arrêter à Pass::preparePassManager et à partir de là, nous pouvons utiliser étape et ensuite de suivre l'exécution. Mais est-ce que je peux déboguer un passage llvm?

+0

Salut, je pense que je n'ai pas ajouté de symboles de débogage lors de la construction de LLVM. Puis-je toujours utiliser gdb pour le débogage? Cela aura-t-il des limites sur le débogage? – algoProg

+0

Il ne devrait pas y avoir de problèmes. –

Questions connexes