Q
斷點如何工作?
2
A
回答
14
調試器通常可以設置兩種不同類型的斷點:軟件斷點和硬件斷點。
軟件斷點包括用「break」指令(例如x86上的int 3
)替換目標地址處的指令並等待CPU執行它。當該指令被觸發時,CPU產生一個異常並將控制轉移給調試器。好處在於,您可以根據需要定義多個斷點,但缺點是需要修改程序的內存(這可能不適用於只讀內存中的程序,或者可能導致程序的行爲不同讀取自己的程序存儲器)。
另一種硬件斷點包括在CPU中設置一個特殊的調試寄存器,讓它在遇到指定地址時斷開它。當程序計數器到達該地址時,CPU將自動產生一個異常。好處是不需要軟件修改,但缺點是這依賴於有限的資源(調試寄存器),其中可能沒有多少。例如,x86處理器通常只有4個調試地址寄存器,因此您一次只能設置4個硬件斷點。
調試器通常根據可用資源(例如前4個斷點和軟件斷點的硬件斷點)選擇策略,儘管也可以配置許多策略來強制某個特定類型的斷點。例如,流行的調試器GDB使用hbreak
命令顯式創建硬件斷點。
+0
嗨nneonneo,謝謝你的迴應。實際上,我對調試和斷點有很多疑問,我主要關心的是軟件斷點......當程序計數器到達斷點時發生的過程如何發生。你能詳細解釋一下嗎? – VRU
1
這取決於處理器和操作系統。在Linux上,調試器正在使用系統調用,內核在處理器的某些硬件功能的幫助下執行該系統調用。
相關問題
- 1. 斷點不工作
- 2. 如何使斷點工作在bashdb
- 3. Xcode:斷點停止工作
- 4. Django斷點不工作PyCharm
- 5. SampleSyncAdapter斷點不工作
- 6. IE開發工具斷點不工作
- 7. 斷點如何在現代高分辨率設備上工作?
- 8. C#代碼不工作沒有斷點
- 9. xdebug斷點工作,但一步不
- 10. Android工作室省略斷點
- 11. VB.NET Debug.Print不工作,斷點消失
- 12. Android工作室gradle斷點在行
- 13. 服務結構斷點不工作
- 14. 來自Scala工作表的斷點?
- 15. QComboBox子類中的斷點不工作
- 16. CUDA __syncthreads();不工作;逆斷點命令
- 17. 洞察調試器斷點不工作
- 18. 安裝valgrind後斷點不工作
- 19. plsql遠程調試斷點不工作
- 20. 的Xcode 4.6/5 LLDB斷點不工作
- 21. 調試中斷點不工作?
- 22. 調試斷點在Eclipse中不工作
- 23. PyCharm IDE斷點不子呼叫工作
- 24. 斷點無法在Xcode 3.2.5中工作
- 25. JQuery Accordion不在Bootstrap中斷點工作
- 26. 如何使用Xcode 4斷點動作
- 27. MIPS異常和中斷如何工作?
- 28. 軟斷言是如何工作的
- 29. java中的斷言如何工作?
- 30. java類型推斷如何工作?
* 6 *來自哪裏? – meskobalazs
@tom爲什麼絲毫不重要?它甚至不關心他們正在使用哪個調試器。談到斷點時,所有的CPU都以相同的方式工作。某些操作系統可能在調試器和CPU之間有一些絨毛API,但這是無關緊要的。 – Lundin
[調試器如何工作?](http://stackoverflow.com/q/216819/995714) –