Czy można debugować przepustkę LIVM przy użyciu gdb? Nie mogłem znaleźć żadnych dokumentów na stronie llvm.Debugowanie przepustki LVV z gdb
Odpowiedz
Tak. Zbuduj LLVM w trybie niezwalniającym (domyślnie). Trwa to trochę dłużej niż kompilacja wydania, ale możesz użyć gdb do debugowania wynikowego pliku obiektu.
Jedna uwaga: musiałem uaktualnić moje Linux-a do 3GB pamięci, aby czas połączenia w trybie debugowania LLVM był rozsądny.
Po Richard Penningtons porady dodając odwrócone, pojedyncze apostrofy + działa na mnie:
gdb /usr/local/bin/opt
następnie wpisz
run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null`
Uwaga: (. Brakuje REP) bym skomentował, ale nie mógł
Najpierw upewnij się, że LLVM jest skompilowana z włączonymi opcjami debugowania, co jest w zasadzie ustawieniem domyślnym. Jeśli nie skompilowałeś LLVM z opcjami innymi niż domyślne, twoja obecna kompilacja powinna być w porządku.
Wszystkie przepustki LLVM są uruchamiane przy użyciu narzędzia LLVM opt
(optymalizator). Przekazy są kompilowane do plików obiektów udostępnionych, tj. LLVMHello.so
w pliku build/lib
, a następnie ładowane za pomocą narzędzia opt
. Aby debugować lub przejść przez przepustkę, musimy zatrzymać LLVM przed rozpoczęciem wykonywania pliku .so
, ponieważ nie ma możliwości umieszczenia punktu przerwania w pliku obiektu współużytkowanego. Zamiast tego możemy umieścić przerwę w kodzie przed, która wywoła przepustkę.
Zamierzamy umieścić punkt przerwania w llvm/lib/IR/Pass.cpp
Oto jak to zrobić:
Przejdź do budowy/bin i otwórz terminal i wpisać
gdb opt
. Jeśli skompilowałeś llvm z dodanymi symbolami debugowania, to gdb zajmie trochę czasu, aby załadować symbole debugowania, inaczej gdb powieloading debugging symbols ... (no debugging symbols found)
.Teraz musimy ustawić punkt przerwania w metodzie
void Pass::preparePassManager(PMStack &)
wPass.cpp
. Jest to prawdopodobnie pierwsza (lub jedna z pierwszych) metod związanych z ładowaniem przepustki. Możesz to zrobić, wpisującbreak llvm::Pass::preparePassManager
w terminalu.Uruchamianie przebiegu. Mam plik bitcode nazwie
trial.bc
i taką samąLLVMHello.so
przepustkę więc uruchomić go zrun -load ~/llvm/build/lib/LLVMHello.so -hello < ~/llvmexamples/trial.bc > /dev/null
gdb będzie teraz zatrzymać na
Pass::preparePassManager
i stąd możemy wykorzystać na krok i następny prześledzić wykonanie.
Witam, myślę, że nie dodałem symboli debugowania podczas budowania LLVM. Czy nadal mogę używać gdb do debugowania? Czy to ma jakiekolwiek ograniczenia w debugowaniu? – algoProg
Nie powinno być żadnych problemów. –
- 1. gdb - debugowanie z rurą
- 2. Debugowanie qemu z gdb
- 3. Debugowanie bootloadera z gdb w qemu
- 4. Python: debugowanie z gdb (na OSX)
- 5. Zdalne debugowanie czystego programu C z GDB
- 6. Zdalne debugowanie GDB nie może znaleźć symboli
- 7. Debugowanie za pomocą Eclipse CDT i GDB
- 8. Debugowanie za pomocą gdb i gfortran - FPE
- 9. debugowanie kodu C++ z szablonami i STL z gdb
- 10. Debugowanie zdemontowanych bibliotek za pomocą gdb
- 11. Debugowanie demona uruchomieniowego przy użyciu gdb
- 12. Debugowanie odwołań rvalue w C++ 11 z gdb
- 13. Symfony2 - Jądro dostępu z przepustki kompilatora
- 14. odwrotne debugowanie z lldd
- 15. Biblioteka debugowania rdzy z GDB
- 16. E-maile oznaczone jako spam - przepustki SPF, przepustki DKIM, identyfikatory nadawców
- 17. Jak mogę przekazać flagi do przepustki LLVM?
- 18. Python rozszerzenie debugowanie
- 19. Debugowanie rdzenia wyprodukowanego przez valgrind
- 20. Nie można Application Debug wielowątkowy z gdb
- 21. Krok gdb nie działa zgodnie z oczekiwaniami
- 22. Debugowanie kompilacji Visual Studio z Eclipse
- 23. CLion - GDB: obecna wersja to GNU gdb (GDB) (Cygwin 7.10.1-1) 7.10.1; obsługiwana wersja to 7.8.x
- 24. Debugowanie Ember.js z chrome
- 25. debugowanie jenkinsa z zaćmieniem
- 26. Debugowanie Node.js z Eclipse
- 27. debugowanie z PyDev 1.5
- 28. Szablony do debugowania z GDB
- 29. C/C++ Linux GDB API
- 30. Debugowanie Pythona ze skompilowanymi rozszerzeniami
Ale czy mogę debugować przepustkę LIVM? Przepustki LLVM są zwykle uruchamiane przy użyciu opcji opt, więc nie wiem, jak użyć gdb do uruchomienia. Czy możesz mi powiedzieć polecenie? –
Możesz uruchomić np. "gdb/usr/local/bin/opt" i wpisz "uruchom". –
http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name