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