我想知道gdb如何在內部工作。 例如我知道一個簡單的想法,它使用ptrace()系統調用來監視跟蹤的程序。 但我想知道它如何處理信號,它如何插入新的代碼,以及其他如此神話般的事情。gdb如何工作?
Q
gdb如何工作?
25
A
回答
6
你會發現的唯一方法是通過研究source。
您也可以構建它並自行調試它。通過代碼,你會知道究竟是它是如何做的。
讀取GDB源代碼雖然不是心存隱晦 - 它充滿了宏,並且大量使用libbfd
,這本身很難理解。
它必須,因爲它是可移植的(並且特別是在沒有ptrace()
的平臺上構建和工作)。
16
查看GDB Internals Manual,其中涵蓋了一些重要方面。本文檔中還有一個較舊的PDF version。
從手冊:
該文件記錄了GNU調試器,GDB的內部。它包括gdb關鍵算法和操作的描述,以及將gdb調整到特定主機和目標的機制。
3
從gdbint.pdf摘自:
這是可以做到無論是作爲硬件斷點或軟件斷點 :
- 硬件斷點有時可與一些一個內置調試功能芯片。通常這些工作是通過專用的 寄存器來存儲斷點地址。如果PC (程序計數器的簡寫)匹配了斷點 寄存器中的值,則CPU引發異常並將其報告給GDB。
- 另一種可能性是仿真器在使用中;許多模擬器包括手錶從 處理器出來的地址線電路,並迫使其停止如果地址斷點的 地址匹配。
- 第三種可能性是目標已經有能力以某種方式做斷點;例如,一個ROM監視器可能會自己做出 軟件斷點。因此,儘管這些並不是字面意義上的硬件斷點,但從GDB的觀點來看,它們的工作原理是一樣的;
- 軟件斷點需要GDB做更多的工作。基本原理是,GDB將取代程序指令與陷阱, 非法鴻溝,或其他一些指令將導致 異常,然後遇到的真實時,GDB將採取例外 並停止該程序。當用戶說繼續,GDB將恢復 原始指令,單步,重新插入陷阱, 繼續。
相關問題
- 1. GDB如何停止執行其他進程? GDB如何工作?
- 2. GDB步工作不正常
- 3. 與gdb有效地工作
- 4. 如何讓gdb在OSX 10.11下使用macports工作El Capitan?
- 5. 使Qt調試器正常工作(GDB)
- 6. 設置觀看GDB不工作對我
- 7. ndk-gdb在macOS Sierra下工作嗎?
- 8. 獲取GDB與Emacs的工作24
- 9. 山獅沒有工作gdb調試器
- 10. gdb在Windows中無法正常工作
- 11. 如何在gdb
- 12. GDB和GCC工會
- 13. 如何使用gdb
- 14. 如何使用GDB
- 15. 如何grep gdb print
- 16. gdb-python:爲什麼下面的代碼不能在gdb下工作?
- 17. cpp沒有內核和gdb的gdb崩潰附加到工作進程
- 18. GDB和操作碼
- 19. 如何讓gdb跟隨execv?不工作,儘管 「跟隨EXEC模式」
- 20. 如何禁止gdb掛起?
- 21. 如何GDB在運行時
- 22. 如何解釋GDB回溯?
- 23. GDB,如何調試宏
- 24. 如何正確使用gdb?
- 25. Gdb,如何使用打印?
- 26. 如何使用GDB調試
- 27. 如何讓GDB更快
- 28. 如何從python訪問gdb
- 29. Ajax如果不工作。如何工作?
- 30. 如何工作
這包括一些GDB內部的重要方面:www.gnuarm.com/pdf/gdbint.pdf – zengr 2010-10-11 05:05:54
@zengr:你爲什麼不張貼,作爲一個答案? – DarkDust 2010-10-11 05:39:20