2010-10-11 31 views
25

我想知道gdb如何在內部工作。 例如我知道一個簡單的想法,它使用ptrace()系統調用來監視跟蹤的程序。 但我想知道它如何處理信號,它如何插入新的代碼,以及其他如此神話般的事情。gdb如何工作?

+6

這包括一些GDB內部的重要方面:www.gnuarm.com/pdf/gdbint.pdf – zengr 2010-10-11 05:05:54

+3

@zengr:你爲什麼不張貼,作爲一個答案? – DarkDust 2010-10-11 05:39:20

回答

6

你會發現的唯一方法是通過研究source

您也可以構建它並自行調試它。通過代碼,你會知道究竟是它是如何做的。

讀取GDB源代碼雖然不是心存隱晦 - 它充滿了宏,並且大量使用libbfd,這本身很難理解。

它必須,因爲它是可移植的(並且特別是在沒有ptrace()的平臺上構建和工作)。

+0

我想你的意思是[chock full](http://en.wiktionary.org/wiki/chock_full) – sje397 2010-10-11 05:02:09

+0

http://www.cs.utah.edu/dept/old/texinfo/gdb/gdbint.html#SEC1 – zengr 2010-10-11 05:03:11

16

查看GDB Internals Manual,其中涵蓋了一些重要方面。本文檔中還有一個較舊的PDF version

從手冊:

該文件記錄了GNU調試器,GDB的內部。它包括gdb關鍵算法和操作的描述,以及將gdb調整到特定主機和目標的機制。

+0

[GDB Internals Manual](https://sourceware.org/gdb/download/onlinedocs/gdbint/)未找到zengr .. – sree 2014-02-11 12:39:01

+2

感謝Sree!固定。 – zengr 2014-02-11 19:24:46

3

從gdbint.pdf摘自:

這是可以做到無論是作爲硬件斷點或軟件斷點 :

  • 硬件斷點有時可與一些一個內置調試功能芯片。通常這些工作是通過專用的 寄存器來存儲斷點地址。如果PC (程序計數器的簡寫)匹配了斷點 寄存器中的值,則CPU引發異常並將其報告給GDB。
  • 另一種可能性是仿真器在使用中;許多模擬器包括手錶從 處理器出來的地址線電路,並迫使其停止如果地址斷點的 地址匹配。
  • 第三種可能性是目標已經有能力以某種方式做斷點;例如,一個ROM監視器可能會自己做出 軟件斷點。因此,儘管這些並不是字面意義上的硬件斷點,但從GDB的觀點來看,它們的工作原理是一樣的;
  • 軟件斷點需要GDB做更多的工作。基本原理是,GDB將取代程序指令與陷阱, 非法鴻溝,或其他一些指令將導致 異常,然後遇到的真實時,GDB將採取例外 並停止該程序。當用戶說繼續,GDB將恢復 原始指令,單步,重新插入陷阱, 繼續。