關於gdb斷點的真相
【原文:http://blog.csdn.net/wwwsq/article/details/7161238】
gdb的斷點是基於訊號(signal)實現的
在某個地址增加一個斷點,實際上就是修改那個地址的程式碼,把原來的程式碼替換成INT 3指令,同時讓gdb捕獲這個signal並做相應的處理:包括執行被替換掉的指令,並跳轉回來。
因此,只要斷點不被走到,那麼斷點就不會影響程式的執行效率;因為程式的其他地方都沒改變,該怎麼執行還是怎麼執行。
gdb在遇到斷點之後可以做很多事情
包括:
停下來等使用者處理
自動繼續
自動執行一些gdb指令(用commands命令可以配置斷點的自動執行)
判斷條件是否要停下來(這就是大名鼎鼎的條件斷點)
在走到斷點之後,不管是路過還是停下來,都會影響效能
因為通常到了斷點就會通過INT3停下來。
只是條件斷點有點特別,它分為軟體和硬體兩種。這是因為條件斷點這個需求太普遍了,因此有人就想了一個辦法從硬體支援一部分:在x86平臺,某些條件斷點可以不插入INT 3,而是插入一個其他指令,當程式走到這個地址的時候,並不是直接發出INT 3訊號,而是先去比較一下特定暫存器和某個地址的內容,再決定要不要INT 3。
如果能採用硬體條件斷點,會比軟體條件斷點的效能好很多。搜尋‘硬體斷點寄 存器’會找到更多資訊。
相關文章
- gdb多檔案設定斷點斷點
- 關於http斷點續傳那點事HTTP斷點
- 關於Gdb工具的交叉編譯、移植編譯
- 關於谷歌的10個驚人真相谷歌
- linux c之gdb常用斷點除錯總結Linux斷點除錯
- 39個你不知道的關於亞馬遜的真相亞馬遜
- gdb設定一個函式,出現4個斷點的原因函式斷點
- Lua中如何實現類似gdb的斷點除錯—07支援通過函式名稱新增斷點斷點除錯函式
- 關於判斷兩個矩陣相交的一點想法矩陣
- 關於js的判斷JS
- 關於機器學習你必須瞭解的十個真相機器學習
- 哈佛商業評論:關於區塊鏈的真相區塊鏈
- 透漏幾點面試的真相面試
- day31-33 關於點選事件內的判斷語句事件
- 關於程式設計一些鮮為人知的真相程式設計
- postman關於斷言的設定Postman
- 關於java編寫斷點續傳中ftp的list命令問題Java斷點FTP
- 關於latch的一點點理解
- 關於背單詞軟體,你不知道的驚人真相
- 關於難點的思考
- Homestead 下關於 PhpStorm Xdebug 斷點除錯工具的安裝PHPORM斷點除錯
- 關於PHP 的一點點小分享PHP
- 關於 Cookie的優缺點Cookie
- 關於Java的一點想法Java
- 關於crontab 的一點理解
- 關於模式爭論的一點點思考模式
- 針對於debugger斷點的記錄斷點
- 關於浮點指令
- 【原】關於SQLServer死鎖的診斷和定位SQLServer
- 關於 Flex 的那點事兒Flex
- 關於同步的一點思考-下
- 關於Ruby的語言特點
- 最近關於工作的幾點思考
- 關於git flow的一點思考Git
- 關於json的幾點思考JSON
- 關於PostCSS的一點小科普CSS
- 關於ORACLE的一點總結Oracle
- 關於Decorator模式的幾點想法模式