È possibile eseguire il debug di un llvm pass utilizzando gdb? Non sono riuscito a trovare documenti sul sito di llvm.Debug di un llvm con gdb
risposta
Sì. Costruisci LLVM in modalità non a rilascio (impostazione predefinita). Ci vuole un po 'più tempo di una versione di rilascio, ma puoi usare gdb per eseguire il debug del file oggetto risultante.
Una nota di cautela: ho dovuto aggiornare il mio box Linux a 3 GB di memoria per rendere ragionevoli i tempi di collegamento in modalità debug LLVM.
seguendo Richard Penningtons consiglio aggiungendo backticks + funziona per me:
gdb /usr/local/bin/opt
quindi digitare
run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null`
Nota: (. Mancante rep) avrei commentato, ma non poteva
Per prima cosa assicurati che LLVM sia compilato con le opzioni di debug abilitate, che è fondamentalmente l'impostazione predefinita. Se non hai compilato LLVM con opzioni non predefinite, la tua build attuale dovrebbe andare bene.
Tutti i passaggi LLVM vengono eseguiti utilizzando lo strumento opt
(ottimizzatore) di LLVM. I pass vengono compilati in file di oggetti condivisi, ad esempio il file LLVMHello.so
in build/lib
e quindi caricati dallo strumento opt
. Per eseguire il debug o il passaggio attraverso il passaggio, è necessario arrestare LLVM prima che inizi l'esecuzione del file .so
perché non esiste un modo per inserire un punto di interruzione in un file oggetto condiviso. Invece, possiamo inserire un'interruzione nel codice prima del invoca il passaggio.
che andremo a mettere un punto di interruzione in llvm/lib/IR/Pass.cpp
Ecco come fare:
Naviga per costruire/bin e terminale aperto e digitare
gdb opt
. Se hai compilato llvm con i simboli di debug aggiunti, gdb impiegherà del tempo per caricare i simboli di debug, altrimenti gdb diràloading debugging symbols ... (no debugging symbols found)
.Ora è necessario impostare un punto di interruzione nel metodo
void Pass::preparePassManager(PMStack &)
inPass.cpp
. Questo è probabilmente il primo (o uno dei primi) metodi coinvolti nel caricamento del passaggio. È possibile farlo digitandobreak llvm::Pass::preparePassManager
nel terminale.Esecuzione del pass. Ho un file di codice binario che chiamato
trial.bc
e lo stessoLLVMHello.so
passaggio così ho eseguito conrun -load ~/llvm/build/lib/LLVMHello.so -hello < ~/llvmexamples/trial.bc > /dev/null
gdb sarà ora fermarsi a
Pass::preparePassManager
e da qui possiamo usare passo successivo e per tracciare l'esecuzione.
Ciao, penso di non aver aggiunto i simboli di debug durante la creazione di LLVM. Posso ancora usare gdb per il debug? Avrà qualche limitazione sul debug? – algoProg
Non ci dovrebbero essere problemi. –
- 1. di debug ++ modello con gdb
- 2. Debug qemu con gdb
- 3. Debug LLVM IR
- 4. Libreria di debug di Rust con GDB
- 5. Debug LLVM utilizzando Eclipse
- 6. Debug di bootloader con gdb in qemu
- 7. Errore di debug remoto con GDB
- 8. problema con l'output dell'applicazione debug in gdb
- 9. Programma debug basato su C con gdb
- 10. Debug delle librerie smontate con gdb
- 11. Impossibile Applicazione Debug Multi-Threaded con gdb
- 12. debug di codice C++ con modelli e STL con gdb
- 13. Xcode 3.2 + LLVM = nessun simbolo locale durante il debug
- 14. gdb: (nessun simbolo di debug trovato)
- 15. Debug di codice utente su xv6 con gdb
- 16. Debug di un demone in esecuzione utilizzando gdb
- 17. gdb - il debug con l'ingresso in filodiffusione (non argomenti)
- 18. Debug delle best practice per C++ STL/Boost con gdb
- 19. Come interpretare gli indirizzi backtrace per il debug con GDB
- 20. messaggio gdb strano quando il debug programma
- 21. Come eseguire il debug usando gdb?
- 22. Debugging con gdb - Best practice
- 23. Come eseguire il debug di un programma che richiede l'input dell'utente da stdin con GDB?
- 24. problemi con gdb stdin reindirizzamento
- 25. gdb - il debugging con tubo
- 26. Tutorial di debug multithreading per GDB e C
- 27. gdb split view con codice
- 28. Debug di un core prodotto da valgrind
- 29. Come si imposta il flag di debug di GDB con cmake?
- 30. usando getopt con gdb
Ma è possibile eseguire il debug di un llvm pass? I passaggi LLVM vengono solitamente eseguiti utilizzando opt, quindi non so come usare gdb per eseguirlo. Puoi dirmi il comando? –
È possibile eseguire ad es. "gdb/usr/local/bin/opt" e digita "esegui". –
http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name