歷史調試器能夠將程序狀態(包括當前指令)恢復到以前的狀態。這在託管或非託管環境中如何實現?我無法想象調試器在每條指令上都會拍攝整個系統的狀態鏡頭。歷史調試器如何工作?
回答
這樣做的一種方法是記錄系統中非確定性的來源(I/O,中斷)並以不同的時間間隔拍攝狀態快照。這樣,通過恢復到以前的快照並使用記錄的非確定性向前播放,您可以「倒帶」,直到您在過去達到您想要的位置。
例如,假設下面的時間表:
1 2 3 4
| | | |
- 計劃啓動
- 由歷史調試
- 在該用戶想退
- 現在 時間點採取國家快照
假設用戶想要t o回到第3點。你可以通過恢復系統狀態來做到這一點(例如,存儲器,寄存器)指向2並讓系統照常執行,直到它到達點3.當需要從磁盤,網絡或某些其他非確定性來源獲取數據時,歷史調試器可以使用其記錄的信息來提供數據。對用戶來說,似乎程序的狀態只是簡單地恢復到了第3點。
我相信這是VMWare's Replay Debugger工作原理的簡化視圖(另請參閱tech talk)。
有趣的想法,聽起來很合理。你知道任何流行的歷史調試器是否真的使用這種方法嗎?你知道其他方式正在使用,以實現相同的目標嗎? – mafu 2010-05-19 08:29:43
它可能需要每次狀態的快照,但只有保留狀態之間的增量(當然,這是不可能說任何人真正是如何工作的不看它的代碼)。
好吧,最重要的是,它們不會在的每條指令處快照,只是在各種「興趣點」(例如,拋出異常時,某些方法被調用時等)。例如,微軟的IntelliTrace(在VS2010中)快照訪問文件系統和註冊表,與WinForms UI交互等等。
其次,它沒有快照整個程序狀態。例如,當您訪問文件時,IntelliTrace會記錄文件的名稱,您要求的訪問權限等等 - 但您不能回到那個位置並查看每個全局變量的狀態。
我不知道其他歷史調試器,但這就是IntelliTrace在VS2010中的工作原理。
- 1. 測試工作流程歷史Autocleanup
- 2. 調試器如何工作?
- 3. R工作空間歷史
- 4. 歷史Goback不工作
- 5. 控制器操作歷史
- 6. python中變量的調試歷史
- 7. 如何獲得測試歷史
- 8. 歷史的歷史
- 9. 訪問工作流歷史列表
- 10. 搜索工作項目歷史
- 11. Sitecore - 更新工作流歷史
- 12. 蜂巢歷史comman不工作
- 13. 在apscheduler中維護工作歷史
- 14. 骨幹歷史開始不工作
- 15. 計數工作歷史日誌
- 16. IRB歷史不是在〜/ .irbrc工作
- 17. 歷史擴展不是腳本工作
- 18. HTML5歷史pushState的工作不
- 19. Angularjs歷史後退按鈕不工作
- 20. Facebook的工作歷史不可用
- 21. 單元的工作模式和歷史
- 22. 工作目錄歷史記錄
- 23. ipython歷史完成部分工作
- 24. Perl調試器可以將ReadLine歷史保存到文件嗎?
- 25. 如何在Firefox中調試瀏覽器選項卡歷史記錄?
- 26. 如何使用VSCode調試器來調試Gunicorn工作進程?
- 27. 如何製作歷史任務算法?
- 28. 如何知道Linux IO操作歷史?
- 29. mongodb我如何顯示操作歷史
- 30. 如何操作網頁的歷史?
它有一個內置的天文鐘。大多數天文鐘只有一個吸氣器,但這個也有一個二傳手。請參閱頁碼。 15安裝指南 - 安裝微型蟲洞。 – mdma 2010-05-18 23:40:21