Có thể gỡ lỗi một pass llvm bằng gdb không? Tôi không thể tìm thấy bất kỳ tài liệu nào trên trang web llvm.Gỡ lỗi thẻ passvvm với gdb
Trả lời
Có. Xây dựng LLVM ở chế độ không phát hành (mặc định). Phải mất nhiều thời gian hơn bản phát hành bản phát hành, nhưng bạn có thể sử dụng gdb để gỡ lỗi tệp đối tượng kết quả.
Một lưu ý thận trọng: Tôi phải nâng cấp hộp Linux của mình lên 3GB bộ nhớ để làm cho thời gian liên kết chế độ gỡ lỗi LLVM hợp lý.
Sau Richard Penningtons lời khuyên + thêm backticks làm việc cho tôi:
gdb /usr/local/bin/opt
sau đó gõ
run `opt -load=/pathTo/LLVMHello.so -hello </pathTo/your.bc> /dev/null`
Lưu ý: (. Thiếu đại diện) tôi sẽ nhận xét, nhưng không thể
Trước tiên hãy đảm bảo LLVM được biên dịch với các tùy chọn gỡ lỗi được bật, về cơ bản là cài đặt mặc định. Nếu bạn không biên dịch LLVM với các tùy chọn không mặc định thì xây dựng hiện tại của bạn sẽ ổn.
Tất cả các thẻ LLVM được chạy bằng công cụ opt
(trình tối ưu hóa) của LLVM. Các thẻ được biên dịch thành các tệp đối tượng được chia sẻ, tức là, tệp LLVMHello.so
trong build/lib
và sau đó được tải bằng công cụ opt
. Để gỡ lỗi hoặc bước qua vượt qua chúng ta phải ngăn chặn LLVM trước khi nó bắt đầu thực hiện tệp .so
vì không có cách nào để đặt điểm ngắt trong tệp đối tượng được chia sẻ. Thay vào đó, chúng tôi có thể đặt lệnh ngắt trong mã trước khi nó gọi đường chuyền.
Chúng ta sẽ đặt một breakpoint trong llvm/lib/IR/Pass.cpp
Dưới đây là làm thế nào để làm điều đó:
Navigate to xây dựng/bin và thiết bị đầu cuối mở và gõ
gdb opt
. Nếu bạn biên dịch llvm với các biểu tượng gỡ lỗi được thêm vào thì gdb sẽ mất một thời gian để tải các biểu tượng gỡ lỗi, nếu không gdb sẽ nóiloading debugging symbols ... (no debugging symbols found)
.Bây giờ, chúng tôi cần đặt điểm ngắt tại phương pháp
void Pass::preparePassManager(PMStack &)
trongPass.cpp
. Đây có lẽ là phương pháp đầu tiên (hoặc một trong những phương pháp đầu tiên) liên quan đến việc tải mật khẩu. Bạn có thể thực hiện việc này bằng cách nhậpbreak llvm::Pass::preparePassManager
vào thiết bị đầu cuối.Chạy thẻ. Tôi có một tập tin bitcode gọi
trial.bc
và cùngLLVMHello.so
vượt qua vì vậy tôi chạy nó vớirun -load ~/llvm/build/lib/LLVMHello.so -hello < ~/llvmexamples/trial.bc > /dev/null
gdb bây giờ sẽ dừng lại ở
Pass::preparePassManager
và từ đây trở đi chúng tôi có thể sử dụng bước và tiếp theo để theo dõi việc thực hiện.
Xin chào, tôi nghĩ rằng tôi đã không thêm các biểu tượng gỡ lỗi trong khi xây dựng LLVM. Tôi vẫn có thể sử dụng gdb để gỡ lỗi? Liệu có bất kỳ hạn chế nào về gỡ lỗi? – algoProg
Không có vấn đề gì. –
- 1. Lỗi gỡ lỗi từ xa với GDB
- 2. Gỡ lỗi với Eclipse CDT và GDB
- 3. Gỡ lỗi qemu bằng gdb
- 4. Python: gỡ lỗi bằng gdb (trên OSX)
- 5. Gỡ lỗi các thư viện đã tháo rời với gdb
- 6. Bất kỳ may mắn gỡ lỗi lambdas với gdb?
- 7. Visual studio + gdb gỡ lỗi từ xa
- 8. Gỡ lỗi chương trình MinGW với gdb trên Windows, không chấm dứt khi xác nhận lỗi
- 9. gdb: (không tìm thấy các biểu tượng gỡ lỗi)
- 10. gỡ lỗi ngược với lldd
- 11. nhắn gdb lạ khi gỡ lỗi chương trình C++
- 12. Làm cách nào để gỡ lỗi bằng gdb?
- 13. Hướng dẫn gỡ lỗi đa luồng cho GDB và C
- 14. gỡ lỗi mã C++ với các mẫu và STL với gdb
- 15. Gỡ bộ nạp khởi động với gdb trong qemu
- 16. Đối số gỡ lỗi dựa trên chương trình C với gdb
- 17. Làm thế nào để gỡ lỗi hạt nhân Linux với GDB và QEMU?
- 18. Tùy chọn GCC có thể gây ra sự cố khi gỡ lỗi với GDB
- 19. Làm thế nào để giải thích địa chỉ backtrace để gỡ lỗi với GDB
- 20. Làm cách nào để nhập lệnh vào dấu nhắc gdb khi gỡ lỗi với CDT Eclipse?
- 21. vấn đề với đầu ra ứng dụng được gỡ lỗi trong gdb
- 22. Làm cách nào để sử dụng trình gỡ lỗi gdb MinGW để gỡ lỗi chương trình C++ trong Windows?
- 23. Gỡ lỗi gốc của Android (ndk-gdb) trên HTC Desire: lỗi chạy-như là?
- 24. Lỗi gỡ lỗi - lỗi gắn với w3wp.exe
- 25. Thẻ chất lỏng gỡ lỗi trong Octopress/Jekyll
- 26. Python mở rộng gỡ lỗi
- 27. Gỡ lỗi thông qua libstdC++
- 28. MPI gỡ lỗi với VS2012
- 29. Gỡ lỗi web2py với Eclipse
- 30. Gỡ lỗi với Pydev 1.5
Nhưng tôi có thể gỡ lỗi thẻ vượt qua không? LLVM vượt qua thường được chạy bằng cách sử dụng opt vì vậy tôi không biết làm thế nào để sử dụng gdb để chạy nó. Bạn có thể cho tôi biết lệnh không? –
Bạn có thể chạy ví dụ: "gdb/usr/local/bin/opt" và nhập "chạy". –
http://llvm.org/docs/WritingAnLLVMPass.html#debughints – name