天天看點

ARM Hardware Breakpoint vs Software Breakpoint

對于ARM debugger工具,常用的有兩種breakpoint.  Hardware vs Software 類型。

ARM 文檔給出的相關定義如下。

Hardware breakpoints:

1) 依賴于目标processor實作, 大多數ARM processor都包含了特定的硬體資源,例如

ARM EmbeddedICE 硬體邏輯, 來比對特定的硬體事件。

調試時使用的調試器可以配置這些硬體資源來實作指令和資料斷點。

資料斷點有時也被稱作為 watchpoint.

2) 哪些硬體資源有效存在,依賴于所使用的處理器。 具體需要參考處理器手冊。

3) 硬體斷點能夠提供額外的比對能力。 比如可以比對某個外部信号,

比如區分具有特定權限和非特定權限的存取通路等。  設定位址/資料斷點對話框列出了目标硬體的能力範圍。

4) 硬體指令斷點并不需要記憶體中的指令發生改變。

這意味着硬體斷點可以用來調試flash 和 ROM 中的代碼, 并且也能被用于調試可自我修改的代碼。

Software Instruction Breakpoint

1) 如果處理器不支援硬體指令斷點, 或者你已經用完了有效的硬體斷點資源,

這時你可以使用軟體指令斷點。

2) 軟體指令斷點修改記憶體中的指令以創造一個特殊的值, 該值被執行的時候使得處理器進入調試模式。

寫入記憶體中的特殊值取決于所使用的處理器類型。 對于ARM處理器, 根據體系結構和處理器版本,

下列機制之一被使用:

      a ) Undefined instruction 被寫入記憶體中, 并且一個硬體斷點資源被用來監測該指令的執行。

           當硬體斷點單元監測到該 undefined instruction 進入執行流水線階段, 則處理器進入調試模式。

      b )  一條 ARMv5 BKPT 指令被寫入記憶體, 并且一個硬體斷點資源被用來監測該指令的執行。

           當硬體斷點單元監測到該 BKPT 指令進入執行流水線階段,則處理器進入調試模式。

      c ) 一條 ARMv5 BKPT指令被寫入記憶體。 當該條指令被執行的時候, 處理器自動進入調試模式。

3) 當一個硬體斷點單元被用于監測軟體指令斷點時, 無論有多少個軟體指令斷點被設定,

僅僅隻有單個的硬體斷點資源被使用。 如果你不能成功設定軟體指令斷點, 你可能需要嘗試

首先釋放一個硬體斷點資源出來。

4) 軟體斷點不能用于調試flash 或者 ROM 代碼。 并且在可自我修改的代碼中不可靠。

注意

1) 當浏覽記憶體或者彙編代碼時, 調試目标硬體給出的是記憶體實際值。

2) 在運作之前, 任何軟體斷點都已經被寫入了記憶體。

3) 當處理器停機的時候, 軟體斷點會從記憶體中被移除。 在許多處理器中,不能在運作時通路記憶體。

     這意味着如果你在目标硬體運作時,斷開了調試器和被調試處理器間的連接配接, 那些斷點将被保留在記憶體中!

     如果處理器随後執行其中的某個斷點指令,則(具體依賴于體系結構)處理器要麼停在軟體斷點處;

     要麼導緻處理器産生一個未定義異常。