基于Eclipse的開發(fā)環(huán)境中調(diào)試器設(shè)計與實現(xiàn)
斷點管理器(IBreakpoint Manager)是在工作空間中的斷點集合。當斷點創(chuàng)建時,會在管理器中注冊。當斷點被刪除,它也會在管理器中移除,當斷點添加,移除,以及斷點屬性改變時,提供更改通知。客戶端需要實現(xiàn)IBreakpointsListener以及在斷點管理器中注冊。例如:調(diào)試目標偵聽更改通知,因此當它們改變時,可以安裝、移除、更新斷點信息。客戶端也需要實現(xiàn)IBreak-pointManaagerListener,以便實現(xiàn)當斷點管理器被使能或禁止時的通知偵聽,也可以允許所有的斷點被暫時禁止,而不用改變單個斷點的狀態(tài)。
當建立了調(diào)試目標之后,應(yīng)該搜索斷點管理器,查找存在的斷點,并安裝這些斷點。調(diào)試目標應(yīng)該在其生命周期中偵聽斷點的添加、移除、改變等信息,并且能夠更新這些信息。
在編輯器中顯示了斷點和觀察點的位置。編輯器在豎直條中顯示標記,當標記改變時更新。繼承AbstractDecoratedTextEditor的編輯器會有一個豎直標記條,用于顯示和正在編輯的文件有關(guān)的標記。在豎直標記條中雙擊,可能會產(chǎn)生多于一種的操作,可以設(shè)置行斷點或者設(shè)置觀察點。在編輯器豎直標記條中添加雙擊動作,可以應(yīng)用工作臺擴展點來添加編輯器操作。參考AbstractRulerActionDelegate給期望的工作添加操作,可通過擴展點editorActions予以添加。斷點的模型如圖3所示。本文引用地址:http://2s4d.com/article/152476.htm
2.2 命令處理
命令處理包括單步進入、單步跳過、返回、懸掛、恢復(fù)、下載、運行、繼續(xù)運行、終止等。平臺提供標準模式的命令處理的實現(xiàn)。
所有的命令處理需要實現(xiàn)接口IDeblugCom-mandHandler,并且實現(xiàn)如下函數(shù):
canExecute(IEnabledStateRequest request)
execute(IDebugCommandRequest request)
標準模式可以重載平臺的實現(xiàn),定制模式需要自己提供一個實現(xiàn),包括提供作為適配器的處理類,可以直接實現(xiàn)處理接口。
平臺所定義的處理者進程為如下幾個:
IDisconnectHandler
IDroDToFrameHandler
IResumeHandler
IStepFiltersHandler
IStepIntoHandler
IStepOvetHandler
IStepReturnHandler
ISuspendHandler
ITerminateHandler
處理者和命令處理之間的交互是異步的。需要先更新使能狀態(tài),然后開始執(zhí)行。傳遞到命令處理的是一個IRequest對象,實現(xiàn)接收狀態(tài),允許取消,當請求結(jié)束時通知等功能。
命令執(zhí)行的過程如圖4所示。
平臺提供的命令處理應(yīng)用JOB來實現(xiàn)異步交互。命令處理為每一個請求和返回維護一個JOB的進度表,并且JOB是異步運行的。
2.3 視圖內(nèi)容
利用平臺提供的tree視圖的實現(xiàn)變量、寄存器的查看,并用內(nèi)容提供者和標簽提供者來支持定制異步內(nèi)容。這個tree視圖的實現(xiàn)基于JFace的tree視圖,并實現(xiàn)了接口ILazyTreePathContentProvider。這個視圖不能被繼承,但是可以被初始化。
一些調(diào)試視圖定義了很多列。像變量視圖,寄存器視圖,都分別有名字列,值列等。調(diào)試模型提供要顯示的列,以及元編輯器對某一個值進行編輯,還為每一個列提供標簽。視圖、列、元編輯器之間的關(guān)系如圖5所示。列表述定義了要顯示的列,包括列頭、列圖像、列標識。允許提供多個列,在初始化時顯示其中的幾列,用戶可以選擇顯示哪些列。
評論