Tôi muốn biết gdb hoạt động như thế nào trong nội bộ. ví dụ: Tôi biết một ý tưởng ngắn gọn rằng nó sử dụng ptrace() gọi hệ thống để theo dõi chương trình truy tìm. Nhưng tôi muốn biết nó xử lý tín hiệu như thế nào, nó chèn mã mới như thế nào, và những thứ tuyệt vời khác như vậy.gdb hoạt động như thế nào?
Trả lời
Cách duy nhất bạn sẽ tìm hiểu là bằng cách nghiên cứu source.
Bạn cũng có thể tự xây dựng và gỡ lỗi chính nó. Bước qua mã và bạn sẽ biết chính xác cách hoạt động của mã.
Đọc nguồn GDB không phải dành cho những người yếu tim - nó chứa đầy các macro và sử dụng rất nhiều libbfd
, điều khó hiểu.
Nó phải, bởi vì nó là di động (và đặc biệt, xây dựng và hoạt động trên nền tảng mà không có ptrace()
ở tất cả).
Kiểm tra GDB Internals Manual, bao gồm một số khía cạnh quan trọng. Còn có một số PDF version cũ hơn của tài liệu này.
Từ hướng dẫn:
tài liệu Tài liệu này bên trong của debugger GNU, gdb. Nó bao gồm mô tả các thuật toán và hoạt động chính của gdb, cũng như các cơ chế điều chỉnh gdb cho các máy chủ và mục tiêu cụ thể.
Taken từ gdbint.pdf:
Nó có thể được thực hiện hoặc như breakpoint phần cứng hoặc phần mềm như breakpoint:
- breakpoint phần cứng đôi khi có sẵn như là một tính năng gỡ lỗi BUILTIN với một số khoai tây chiên. Thông thường các công việc này bằng cách đăng ký dành riêng để lưu trữ địa chỉ điểm ngắt. Nếu PC (viết tắt của bộ đếm chương trình) bao giờ khớp với giá trị trong một breakpoint đăng ký, CPU sẽ đưa ra một ngoại lệ và báo cáo cho GDB.
- Khả năng khác là khi trình mô phỏng đang được sử dụng; nhiều bộ mô phỏng bao gồm mạch đồng hồ xem các đường địa chỉ sắp ra từ bộ vi xử lý và buộc nó dừng lại nếu địa chỉ khớp với địa chỉ của điểm ngắt.
- Khả năng thứ ba là mục tiêu đã có khả năng làm điểm ngắt bằng cách nào đó; ví dụ, một màn hình ROM có thể thực hiện các điểm ngắt phần mềm riêng của nó. Vì vậy, mặc dù đây không phải là phần cứng điểm ngắt, từ quan điểm của GDB, chúng hoạt động tương tự;
- Điểm ngắt phần mềm yêu cầu GDB thực hiện công việc phần nào hơn. Lý thuyết cơ bản là GDB sẽ thay thế hướng dẫn chương trình bằng một cái bẫy, phân chia bất hợp pháp hoặc một số hướng dẫn khác sẽ gây ra một ngoại lệ và sau đó khi nó gặp phải, GDB sẽ loại trừ và dừng chương trình. Khi người dùng nói tiếp tục, GDB sẽ khôi phục hướng dẫn ban đầu, một bước, lắp lại bẫy và tiếp tục.
- 1. gdb bước không hoạt động như mong đợi
- 2. Bạn sử dụng gdb như thế nào?
- 3. Trình gỡ lỗi như gdb hoạt động như thế nào để đặt điểm ngắt thông qua JTAG?
- 4. __iter__ hoạt động như thế nào?
- 5. [UIAlertView show] hoạt động như thế nào?
- 6. Traceroute hoạt động như thế nào?
- 7. ArrayAccess hoạt động như thế nào?
- 8. jQuerys $ .each() hoạt động như thế nào?
- 9. DisplacementMapFilter hoạt động như thế nào?
- 10. MenuItem.SHOW_AS_ACTION_IF_ROOM hoạt động như thế nào?
- 11. Haskell: TVar hoạt động như thế nào?
- 12. GetContentResolver() hoạt động như thế nào?
- 13. P6SPY hoạt động như thế nào?
- 14. Trò chuyện hoạt động như thế nào?
- 15. objc_setAssociatedObject hoạt động như thế nào?
- 16. Scanr hoạt động như thế nào? Haskell
- 17. Codename One hoạt động như thế nào?
- 18. PropertyChangedEventHandler hoạt động như thế nào?
- 19. ResolveProjectReferences hoạt động như thế nào?
- 20. PHP max_execution_time hoạt động như thế nào?
- 21. 'typeof' hoạt động như thế nào?
- 22. C# Events hoạt động như thế nào?
- 23. Nén MPEG4 hoạt động như thế nào?
- 24. aspx.designer.cs nó hoạt động như thế nào?
- 25. Dropbox hoạt động như thế nào?
- 26. IDataErrorInfo hoạt động như thế nào?
- 27. Sched_setaffinity() hoạt động như thế nào?
- 28. Ember.js reopenClass hoạt động như thế nào?
- 29. Zmq poller hoạt động như thế nào?
- 30. Biểu tượng hoạt động như thế nào?
này đề cập đến một số khía cạnh quan trọng của internals GDB: www.gnuarm.com/pdf/gdbint.pdf – zengr
@zengr: Tại sao bạn không gửi đó như là một câu trả lời? – DarkDust