Eclipse debug 框架介紹
Debug Framework>>.關鍵詞 Launching(運行器)/debug/breakpoint(斷點)一,基本debug
1.Launching
Eclipse可以通過IDE在開發過程中運行和debug代碼,并且可以擴展.
1>launching 是一個十分便利的工具 包括:
.運行可執行程序
.使用JVM運行一個程序
.線程綁定到一個存在的server上
.在Eclipse JVM中運行一個程序
.使用debug平臺運行任何一個注冊到launch上的類
2>特別提供一些便利的功能:
.產生一個 O/S 線程
.當程序運行時產生連續信息
.一個用于運行參數可編輯的框架
.一個運行實體和他們的I/O的相互交互的VIEW
.一個可擴展的運行模式(如:run, debug, profile…)
.選擇敏感動作來運行
.事件分派
3>運行器配置窗口
.Launch Configuration – 關于如何運行的描述
.Tab Group – 一系列運行配置的tabs
.Mode – 使用那種模式運行(run, debug, profile…)
4>運行器運行窗口
.Launch Object – 運行線程和debug目標容器
.Process – O/S線程的抽象
.Debug Target – 可debug的線程抽象
5>運行器的右鍵菜單
.Launch Delegate – 執行運行器
.Launch Shortcut – 用于選擇運行器的actions
注意:
.運行配置狀態和運行器委派行為是獨立的,并且可以提升裝載插件的lazy性.
.debug平臺提供一個可執行運行配置面板,無論他們是否被運行器裝載,它們都可以在workbench中裝載和他們的運行配置并且需要運行動作
6>運行模型
2. the debug model
1> 什么是debug運行器
2>debug 模型
3>debug 事件
(1)一個debug是描述了在debug過程出現錯誤或者是一個線程中的事件. 用戶接口需要實現和產生debug事件的模型和線程
并且要通過org.eclipse.debug.core.DebugEvent指明. 例如:
.IProcess – 創建, 中止
.IDebugTarget – 創建, 中止, 懸掛, 重新開始
.IThread – 創建, 中止, 懸掛, 重新開始
(2) 懸掛, 重新開始 有詳細的代碼:
.STEP_END, BREAKPOINT, CLIENT_REQUEST, EVALUATION,
EVALUATION_IMPLICIT, UNSPECIFIED
.STEP_INTO, STEP_OVER, STEP_RETURN, CLIENT_REQUEST,
EVALUATION, EVALUATION_IMPLICIT, UNSPECIFIED
(3)eclipse平臺是固有的線程安全的,因此保證所有類是線程安全的.
通過設計可以明示或者是暗示線程同步
(4)用戶接口的actions, 例如 step命令是用過用戶接口線程發出的
.Actions必須是non-blocking.
.我們這里使用step作為例子, 因為它們看起來step
應該被 block, 以便它們發出step debug 命令等待程序解釋器step這一步, 但是那樣是錯誤行為.
取而代之的是,解釋器通過激發一個debug模型事件進行通訊交互
(5)一個SUSPEND事件使用BREAKPOINT或者CLIENT_REQUEST來激發
.轉換perspectives和打開debug視圖是可選的
.debug視圖是擴展掛起線程并且選擇它的最上端堆棧幀
.選擇一個堆棧幀觸發器:
..源文件查詢, 添加一個指示點到editor上
..變量view窗口刷新
..一個SUSPEND事件是使用STEP_END激發
..最上端堆棧幀被選擇并且觸發源文件查詢和變量view窗口刷新; 線程和堆棧幀標簽被刷新
..在step運行過程中改變perspectives時候step狀態不發生變化.
.當視圖刷新它維持當前選擇并且要基于相同元素擴展其狀態
..如果元素維持狀態它將被顯示
..等式可以被執行, 它們可以產生很少垃圾的ID
.在交叉重復使用掛起狀態的debug元素可以被重新使用
..在同一線程中線程和堆棧幀可以在同一個幀中描述
..變量的參考對象和值將在同一個對象中描述
.使用CLIENT_REQUEST激活RESUME事件
..Debug視圖可以collapses所有掛起的線程
..可以選擇變成空的堆棧幀, 清除變量view窗口
..清除已經重新開始的指示點
.使用STEP_INTO / OVER / RETURN激活RESUME 事件
..線程和幀在dubug窗口保持 expanded/selected狀態
..如果SUSPEND/STEP_END在500ms內將不被接受:
..線程圖標和標簽被重新更新顯示
..堆棧幀圖標將被重新顯示
3. breakpoints
1>step請求遇到breakpoint發生什么?
(1)依靠優先體系
(2)Java debugger當遇到一個breakpoint時候必須從JVM中清除這個step請求,否則在下一次使用之前必須完成這一步.
(3)在step過程中變量被改變 它們將用紅色重新渲染
.變量必須實現hasValueChanged()方法
.引用中說: “returns whether the value of this variable has changed
since the last suspend event”
(4)在Java debugger中實現
.debug對象要保持一定數量的掛起多少次; 這個數量在每次掛起都要增加,及時的顯示: 0, 1, 2, …
.每一次一個變量得到新值都要檢查與最近一次訪問時候是否發生變化,如果是這樣, 這個數量要跟bebug目標掛起次數一致
.當變量的counter == debug counter它的值將被改變
2>什么是breakpoints?
.它是在制定位置掛起或者在某種條件下的一種方式
.行斷點, 觀察點, 運行到某一行等各種斷點.
3>斷點提供了多種特點:
.添加, 刪除, 通知修改
.Persistence of breakpoints across workbench invocations
.臨時地略過斷點
.Retargettable actions for creating breakpoints
4>breakpoint器
(1) 斷點管理器保存和持久化斷點
(2) 斷點
.提供用于操作的API (enable, set hit count, 等等)
.使用一個標志存儲它的屬性
(3)debug目標
.在安裝,移除和更新時候通知斷點作出反應
(3) breakpoint 模型
(4)
........................待續
posted on 2005-10-18 12:01 jame 閱讀(5239) 評論(1) 編輯 收藏 所屬分類: Eclipse debug框架