Est-il possible de déboguer un passage llvm en utilisant gdb? Je n'ai trouvé aucun document sur le site de llvm.Débogage d'un passage llvm avec gdb
Répondre
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.
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
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:
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 diraloading debugging symbols ... (no debugging symbols found)
. Maintenant, nous devons définir un point de rupture à la méthodevoid Pass::preparePassManager(PMStack &)
dansPass.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 tapantbreak llvm::Pass::preparePassManager
dans le terminal.Exécution de la passe. J'ai un fichier appelé code binaire
trial.bc
et mêmeLLVMHello.so
passe donc je le dirige avecrun -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?
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
Il ne devrait pas y avoir de problèmes. –
- 1. gdb au-dessus de LLVM?
- 2. Débogage Android avec GDB
- 3. Passage à l'assembly dans gdb
- 4. Débogage avec Eclipse CDT et GDB
- 5. Débogage des pilotes de périphériques spar solaris 10 avec gdb
- 6. Astuces de débogage spécifiques à C++ avec gdb
- 7. Débogage de bibliothèques partagées à distance avec gdb/gdbserver
- 8. gdb n'imprime pas les informations de débogage
- 9. Interruption du message de débogage dans GDB
- 10. ndk-gdb avec plusieurs libs
- 11. gdb: comment accélérer le débogage sur un très gros binaire?
- 12. GDB Débogage des applications à l'aide de clone()
- 13. gdb Erreur d'entrée/sortie de débogage à distance à Android
- 14. Difficulté pour GDB à charger des symboles de débogage
- 15. Débogage du code C++ avec les templates et STL avec gdb
- 16. Aide pour la journalisation de plantage de débogage gdb
- 17. besoin d'aide pour le débogage gdb conditionnelle (code C)
- 18. GDB: débogage de deux threads simultanément d'un processus
- 19. Débogage d'un processus de thread à l'aide de gdb/dbx
- 20. Quelqu'un a-t-il essayé le débogage inverse dans gdb?
- 21. Comment utiliser GDB dans Eclipse pour le débogage C/C++?
- 22. GDB ne saute pas de fonctions sans débogage Info
- 23. LLVM extern functions
- 24. LLVM C++ automatique reliant
- 25. Debug DLL sous Windows avec GDB
- 26. Liaison Qt à LLVM
- 27. Fixations llvm en lua?
- 28. llvm préprocesseur g ++ passes
- 29. débogage de problème avec Code :: Blocs sur Ubuntu en utilisant gdb
- 30. Option GCC qui peut causer des problèmes lors du débogage avec GDB
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? –
Vous pouvez exécuter par ex. "gdb/usr/local/bin/opt" et tapez "exécuter". –
http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name