當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]摘 要:調(diào)試功能是軟件集成開發(fā)環(huán)境中最重要也是最復(fù)雜的功能之一,調(diào)試功能的完善與否很大程度上決定了一個(gè)集成開發(fā)環(huán)境的優(yōu)劣。作為一個(gè)大型軟件集成開發(fā)環(huán)境的一部分,為了實(shí)現(xiàn)其調(diào)試功能,這里通過簡要分析Eclip

摘 要:調(diào)試功能是軟件集成開發(fā)環(huán)境中最重要也是最復(fù)雜的功能之一,調(diào)試功能的完善與否很大程度上決定了一個(gè)集成開發(fā)環(huán)境的優(yōu)劣。作為一個(gè)大型軟件集成開發(fā)環(huán)境的一部分,為了實(shí)現(xiàn)其調(diào)試功能,這里通過簡要分析Eclipse CDT的調(diào)試機(jī)制,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)應(yīng)用于基于Eclipse CDT的嵌入式開發(fā)環(huán)境的調(diào)試器,其中實(shí)現(xiàn)了一系列調(diào)試功能如斷點(diǎn)設(shè)置、單步執(zhí)行、源代碼搜索以及變量、內(nèi)存和寄存器查看等,為整個(gè)集成開發(fā)環(huán)境的實(shí)現(xiàn)打下了基礎(chǔ)。
關(guān)鍵詞:Eclipse;CDT集成開發(fā)環(huán)境;調(diào)試功能;調(diào)試器


O 引 言
    在軟件開發(fā)過程中,程序出現(xiàn)錯(cuò)誤在所難免。無論是普通軟件還是嵌入式軟件,調(diào)試器都是開發(fā)過程中不可缺少的工具。
    “調(diào)試器”是用于跟蹤程序執(zhí)行情況,快速有效地定位錯(cuò)誤產(chǎn)生的位置,從而找到引起錯(cuò)誤的原因,并將其消除的工具。調(diào)試功能是開發(fā)環(huán)境中最重要、也是最復(fù)雜的功能之一,其好壞在很大程度上決定了一個(gè)開發(fā)環(huán)境的優(yōu)劣。調(diào)試是一個(gè)從錯(cuò)誤現(xiàn)象出發(fā),通過某種手段尋找錯(cuò)誤代碼的過程。調(diào)試的基本原理是在發(fā)現(xiàn)程序運(yùn)行的錯(cuò)誤后,設(shè)法再現(xiàn)程序的執(zhí)行過程,并獲取程序執(zhí)行中的有關(guān)信息,通過對(duì)這些信息的分析,逐步找到引起錯(cuò)誤的原因。循環(huán)調(diào)試是最基本的調(diào)試模型;循環(huán)調(diào)試的意思是反復(fù)運(yùn)行程序,利用打印輸出、斷點(diǎn)、單步等技術(shù),觀察程序狀態(tài),控制程序運(yùn)行,逐漸逼近錯(cuò)誤代碼;循環(huán)調(diào)試的前提是程序運(yùn)行是確定的,即對(duì)同樣的輸入,程序的執(zhí)行過程是相同的。串行程序具有確定性。
    調(diào)試的基本行為有觀察、控制與修改。觀察是對(duì)程序的執(zhí)行狀態(tài)進(jìn)行察看,包括處理機(jī)狀態(tài)、進(jìn)程狀態(tài)和數(shù)據(jù)狀態(tài)等;控制即控制程序的執(zhí)行過程,例如設(shè)斷點(diǎn)、單步執(zhí)行等;修改就是改變程序的運(yùn)行狀態(tài),如修改變量的值、修改指令計(jì)數(shù)器、修改狀態(tài)寄存器等。調(diào)試器在不同程度上支持這3種行為的綜合使用。
    經(jīng)典的調(diào)試手段有斷點(diǎn)(Break Pointing)、跟蹤(Tracing)、斷言(Assertion)、分析(Analysis)、打印輸出等。在源程序級(jí)支持圖形化的用戶界面使得調(diào)試工作更加容易進(jìn)行。對(duì)于實(shí)時(shí)程序或?qū)S脵C(jī)上的程序還常采用模擬手段進(jìn)行調(diào)試。


1 CDT的調(diào)試機(jī)制解析
    CDT提供了4個(gè)插件用于實(shí)現(xiàn)調(diào)試功能。這幾個(gè)插件對(duì)于GDB調(diào)試器進(jìn)行操作,并且應(yīng)用GDB提供的MI接口進(jìn)行通信。這四個(gè)插件分別為org.eclipse.cdt.debug.mi.cote插件,用以實(shí)現(xiàn)GDB的MI接口功能及GDB調(diào)用功能;org.eclipse.cdt.debug.mi.ui插件,主要用于實(shí)現(xiàn)GDB的相關(guān)設(shè)置選項(xiàng)界面;org.eclipse.cdt.debug.core插件,用于實(shí)現(xiàn)CDT的調(diào)試模型,包括用串口調(diào)試,用網(wǎng)卡調(diào)試,設(shè)置波特率等功能;org.eclipse.cdt.debug.ui插件,用于實(shí)現(xiàn)界面顯示功能,包括調(diào)試視圖,調(diào)試動(dòng)作等,比如單步調(diào)試,設(shè)置斷點(diǎn),下載,運(yùn)行程序等調(diào)試功能。它們之間的關(guān)系如圖1所示。

    標(biāo)準(zhǔn)的調(diào)試模型并不能代表所有的體系結(jié)構(gòu),像嵌入式硬件結(jié)構(gòu)是不同的,有可能是多個(gè)處理器的不同應(yīng)用,也可能包括DSP處理器的應(yīng)用。CDT平臺(tái)支持將非標(biāo)準(zhǔn)的調(diào)試器集成到平臺(tái)的視圖和動(dòng)作中。調(diào)試器圍繞著活動(dòng)調(diào)試上下文進(jìn)行操作,活動(dòng)調(diào)試上下文是在調(diào)試視圖中選擇的一幀或者一個(gè)線程,這個(gè)上下文驅(qū)動(dòng)了源代碼搜索,變量和寄存器顯示,以及動(dòng)作使能等操作。它們之間的關(guān)系如圖2所示。

2 調(diào)試器的詳細(xì)設(shè)計(jì)
2.1 斷點(diǎn)設(shè)置
    調(diào)試器提供的斷點(diǎn)依賴于調(diào)試系統(tǒng)所具有的能力,以及應(yīng)用這些能力可以構(gòu)建的集合功能。例如,用行斷點(diǎn)實(shí)現(xiàn)運(yùn)行到行,實(shí)現(xiàn)條件斷點(diǎn)等。
    斷點(diǎn)屬性保存在標(biāo)記中,平臺(tái)提供接口IMarker,作為文件中的一般目的標(biāo)記。標(biāo)記是原始數(shù)據(jù)類型鍵值對(duì)的存儲(chǔ)。平臺(tái)提供接口IBreakpoint實(shí)現(xiàn)斷點(diǎn)行為。為了實(shí)現(xiàn)復(fù)雜的斷點(diǎn)行為,調(diào)試器需要提供IBreakpoint的實(shí)現(xiàn)。所有的斷點(diǎn)都有一個(gè)相關(guān)的標(biāo)記保存屬性和在編輯器中顯示,提供和斷點(diǎn)類型相關(guān)的標(biāo)記擴(kuò)展點(diǎn)。如果需要斷點(diǎn)被保存,需要指定persistent為true。其內(nèi)容如下:

[!--empirenews.page--]
    斷點(diǎn)管理器(IBreakpoint Manager)是在工作空間中的斷點(diǎn)集合。當(dāng)斷點(diǎn)創(chuàng)建時(shí),會(huì)在管理器中注冊。當(dāng)斷點(diǎn)被刪除,它也會(huì)在管理器中移除,當(dāng)斷點(diǎn)添加,移除,以及斷點(diǎn)屬性改變時(shí),提供更改通知。客戶端需要實(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的編輯器會(huì)有一個(gè)豎直標(biāo)記條,用于顯示和正在編輯的文件有關(guān)的標(biāo)記。在豎直標(biāo)記條中雙擊,可能會(huì)產(chǎn)生多于一種的操作,可以設(shè)置行斷點(diǎn)或者設(shè)置觀察點(diǎn)。在編輯器豎直標(biāo)記條中添加雙擊動(dòng)作,可以應(yīng)用工作臺(tái)擴(kuò)展點(diǎn)來添加編輯器操作。參考AbstractRulerActionDelegate給期望的工作添加操作,可通過擴(kuò)展點(diǎn)editorActions予以添加。斷點(diǎn)的模型如圖3所示。

2.2 命令處理
    命令處理包括單步進(jìn)入、單步跳過、返回、懸掛、恢復(fù)、下載、運(yùn)行、繼續(xù)運(yùn)行、終止等。平臺(tái)提供標(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)模式可以重載平臺(tái)的實(shí)現(xiàn),定制模式需要自己提供一個(gè)實(shí)現(xiàn),包括提供作為適配器的處理類,可以直接實(shí)現(xiàn)處理接口。
    平臺(tái)所定義的處理者進(jìn)程為如下幾個(gè):
    IDisconnectHandler
    IDroDToFrameHandler
    IResumeHandler
    IStepFiltersHandler
    IStepIntoHandler
    IStepOvetHandler
    IStepReturnHandler
    ISuspendHandler
    ITerminateHandler
    處理者和命令處理之間的交互是異步的。需要先更新使能狀態(tài),然后開始執(zhí)行。傳遞到命令處理的是一個(gè)IRequest對(duì)象,實(shí)現(xiàn)接收狀態(tài),允許取消,當(dāng)請(qǐng)求結(jié)束時(shí)通知等功能。
    命令執(zhí)行的過程如圖4所示。

    平臺(tái)提供的命令處理應(yīng)用JOB來實(shí)現(xiàn)異步交互。命令處理為每一個(gè)請(qǐng)求和返回維護(hù)一個(gè)JOB的進(jìn)度表,并且JOB是異步運(yùn)行的。
2.3 視圖內(nèi)容
    利用平臺(tá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)試模型提供要顯示的列,以及元編輯器對(duì)某一個(gè)值進(jìn)行編輯,還為每一個(gè)列提供標(biāo)簽。視圖、列、元編輯器之間的關(guān)系如圖5所示。列表述定義了要顯示的列,包括列頭、列圖像、列標(biāo)識(shí)。允許提供多個(gè)列,在初始化時(shí)顯示其中的幾列,用戶可以選擇顯示哪些列。

[!--empirenews.page--]

    元編輯器允許用戶在線編輯。為每一個(gè)元素和列提供元編輯器,應(yīng)用JFace的CellEditor進(jìn)行編輯,提供了對(duì)文本選擇框、組合框的標(biāo)準(zhǔn)編輯。為每一個(gè)元素提供元修改器,決定哪一個(gè)列可以被修改,在修改之后更新相應(yīng)的值,可以用實(shí)現(xiàn)接口IcellModifier來達(dá)到目標(biāo)。
2.4 內(nèi)存視圖
    內(nèi)存視圖顯示一段內(nèi)存中的內(nèi)容。內(nèi)存顯示由內(nèi)存塊、內(nèi)存塊內(nèi)容重新獲取、內(nèi)存塊管理器、內(nèi)存塊描述類型、內(nèi)存塊描述、內(nèi)存塊描述綁定、內(nèi)存塊描述管理器等幾部分組成。
    讀取并顯示內(nèi)存塊的過程如下:用戶啟動(dòng)內(nèi)存查看命令,從當(dāng)前調(diào)試上下文中,平臺(tái)獲取適配器IMetm-ryBlockRetrieval,平臺(tái)為內(nèi)存塊請(qǐng)求內(nèi)存塊描述適配器,內(nèi)存塊添加到內(nèi)存塊管理器中,平臺(tái)查找內(nèi)存描述類型列表,找到和內(nèi)存塊符合的內(nèi)存描述,然后創(chuàng)建它,將內(nèi)存描述添加到內(nèi)存視圖中。
    用擴(kuò)展點(diǎn)<memoryRenderings>來擴(kuò)展內(nèi)存描述類型。描述類型包含描述名字,描述惟一的標(biāo)識(shí)符這兩個(gè)信息。實(shí)現(xiàn)接口IMemoryRenderingTypeDelegate中的函數(shù)為:


    需要在描述之間提供同步機(jī)制來使得用戶不用手工進(jìn)行同步。在此提供同步服務(wù)器,以解決當(dāng)前顯示描述之間的同步問題。當(dāng)某一個(gè)描述內(nèi)容改變后,會(huì)發(fā)送一個(gè)描述改變的事件,同步服務(wù)器接收到這個(gè)事件,同步服務(wù)器通知對(duì)這個(gè)事件感興趣的描述,然后其他描述接收這個(gè)事件并進(jìn)行響應(yīng),其過程如圖6所示。

    內(nèi)存描述綁定定義可以應(yīng)用于某種類型中內(nèi)存塊的內(nèi)存描述??梢杂脭U(kuò)展點(diǎn)memoryRenderings進(jìn)行創(chuàng)建。其內(nèi)容如下:


    最終的內(nèi)存視圖如圖7所示。

3 結(jié) 語
    作為大型項(xiàng)目的一個(gè)部分,在分析CDT調(diào)試機(jī)制的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)適用于嵌入式軟件集成開發(fā)環(huán)境的調(diào)試器,具備斷點(diǎn)設(shè)置、單步執(zhí)行、源代碼搜索以及變量、內(nèi)存和寄存器查看等常用調(diào)試功能。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉