0
gdb斷點或服務器(我假設客戶端存根和服務器以幾乎相同的方式處理它們)如何處理SW概念上的斷點? 我對運行gdb存根/服務器的'bare metal'目標感興趣,並且斷點和單步執行都使用軟件中斷。gdb-stub/server如何處理SW斷點?
我實際的問題:
當一個斷點時,是如何保存的指令運行,這樣,斷點可以「重新安裝」和(保存)機器狀態(包括寄存器的內容)不會改變從擊中斷點的那一刻開始? =>何時重新安裝斷點以及如何?在斷點擊中和進入命令解釋器之間,還是在下一步或coninue?
又如何單步跳過斷點工作,使原始的非斷點指令得到執行,並且斷點在單步後仍然保持在那裏?
忘記:文檔「GDB內部」似乎缺少該信息 - 實際上整個子章節中關於單步執行「算法」一章。
[EDIT2] 啊,我似乎需要更強有力的眼鏡:在「Internals'-手冊說: 「當用戶說繼續,GDB會恢復原來的指令,單步,重新插入陷阱,並繼續。「
但是,單步跳過斷點仍然是個懸而未決的問題。
如果確實如此,則單步替換/恢復指令將會陷入陷阱(早先通過設置斷點)。這將導致單步內的斷點。 – turboscrew
@turboscrew你錯了,它*做*這樣做。 Souce:我是GDB開發人員。單步處理(步驟4)意味着在'EFLAGS'中設置'TF'標誌並繼續。處理器將自動執行一個(原始的,在步驟3中恢復的)指令,然後停止。 –
「SW斷點如何處理」 - 沒有陷阱標誌(順便說一下,我沒有使用x86或x86_64系列)。 AAARGH,我明白了:你的意思是通過'恢復原始指令'去除斷點。 – turboscrew