基于Eclipse的開(kāi)發(fā)環(huán)境中調試器設計與實(shí)現
摘 要:調試功能是軟件集成開(kāi)發(fā)環(huán)境中最重要也是最復雜的功能之一,調試功能的完善與否很大程度上決定了一個(gè)集成開(kāi)發(fā)環(huán)境的優(yōu)劣。作為一個(gè)大型軟件集成開(kāi)發(fā)環(huán)境的一部分,為了實(shí)現其調試功能,這里通過(guò)簡(jiǎn)要分析Eclipse CDT的調試機制,設計并實(shí)現了一個(gè)應用于基于Eclipse CDT的嵌入式開(kāi)發(fā)環(huán)境的調試器,其中實(shí)現了一系列調試功能如斷點(diǎn)設置、單步執行、源代碼搜索以及變量、內存和寄存器查看等,為整個(gè)集成開(kāi)發(fā)環(huán)境的實(shí)現打下了基礎。
關(guān)鍵詞:Eclipse;CDT集成開(kāi)發(fā)環(huán)境;調試功能;調試器
O 引 言
在軟件開(kāi)發(fā)過(guò)程中,程序出現錯誤在所難免。無(wú)論是普通軟件還是嵌入式軟件,調試器都是開(kāi)發(fā)過(guò)程中不可缺少的工具。
“調試器”是用于跟蹤程序執行情況,快速有效地定位錯誤產(chǎn)生的位置,從而找到引起錯誤的原因,并將其消除的工具。調試功能是開(kāi)發(fā)環(huán)境中最重要、也是最復雜的功能之一,其好壞在很大程度上決定了一個(gè)開(kāi)發(fā)環(huán)境的優(yōu)劣。調試是一個(gè)從錯誤現象出發(fā),通過(guò)某種手段尋找錯誤代碼的過(guò)程。調試的基本原理是在發(fā)現程序運行的錯誤后,設法再現程序的執行過(guò)程,并獲取程序執行中的有關(guān)信息,通過(guò)對這些信息的分析,逐步找到引起錯誤的原因。循環(huán)調試是最基本的調試模型;循環(huán)調試的意思是反復運行程序,利用打印輸出、斷點(diǎn)、單步等技術(shù),觀(guān)察程序狀態(tài),控制程序運行,逐漸逼近錯誤代碼;循環(huán)調試的前提是程序運行是確定的,即對同樣的輸入,程序的執行過(guò)程是相同的。串行程序具有確定性。
調試的基本行為有觀(guān)察、控制與修改。觀(guān)察是對程序的執行狀態(tài)進(jìn)行察看,包括處理機狀態(tài)、進(jìn)程狀態(tài)和數據狀態(tài)等;控制即控制程序的執行過(guò)程,例如設斷點(diǎn)、單步執行等;修改就是改變程序的運行狀態(tài),如修改變量的值、修改指令計數器、修改狀態(tài)寄存器等。調試器在不同程度上支持這3種行為的綜合使用。
經(jīng)典的調試手段有斷點(diǎn)(Break Pointing)、跟蹤(Tracing)、斷言(Assertion)、分析(Analysis)、打印輸出等。在源程序級支持圖形化的用戶(hù)界面使得調試工作更加容易進(jìn)行。對于實(shí)時(shí)程序或專(zhuān)用機上的程序還常采用模擬手段進(jìn)行調試。
1 CDT的調試機制解析
CDT提供了4個(gè)插件用于實(shí)現調試功能。這幾個(gè)插件對于GDB調試器進(jìn)行操作,并且應用GDB提供的MI接口進(jìn)行通信。這四個(gè)插件分別為org.eclipse.cdt.debug.mi.cote插件,用以實(shí)現GDB的MI接口功能及GDB調用功能;org.eclipse.cdt.debug.mi.ui插件,主要用于實(shí)現GDB的相關(guān)設置選項界面;org.eclipse.cdt.debug.core插件,用于實(shí)現CDT的調試模型,包括用串口調試,用網(wǎng)卡調試,設置波特率等功能;org.eclipse.cdt.debug.ui插件,用于實(shí)現界面顯示功能,包括調試視圖,調試動(dòng)作等,比如單步調試,設置斷點(diǎn),下載,運行程序等調試功能。它們之間的關(guān)系如圖1所示。
標準的調試模型并不能代表所有的體系結構,像嵌入式硬件結構是不同的,有可能是多個(gè)處理器的不同應用,也可能包括DSP處理器的應用。CDT平臺支持將非標準的調試器集成到平臺的視圖和動(dòng)作中。調試器圍繞著(zhù)活動(dòng)調試上下文進(jìn)行操作,活動(dòng)調試上下文是在調試視圖中選擇的一幀或者一個(gè)線(xiàn)程,這個(gè)上下文驅動(dòng)了源代碼搜索,變量和寄存器顯示,以及動(dòng)作使能等操作。它們之間的關(guān)系如圖2所示。
2 調試器的詳細設計
2.1 斷點(diǎn)設置
調試器提供的斷點(diǎn)依賴(lài)于調試系統所具有的能力,以及應用這些能力可以構建的集合功能。例如,用行斷點(diǎn)實(shí)現運行到行,實(shí)現條件斷點(diǎn)等。
斷點(diǎn)屬性保存在標記中,平臺提供接口IMarker,作為文件中的一般目的標記。標記是原始數據類(lèi)型鍵值對的存儲。平臺提供接口IBreakpoint實(shí)現斷點(diǎn)行為。為了實(shí)現復雜的斷點(diǎn)行為,調試器需要提供IBreakpoint的實(shí)現。所有的斷點(diǎn)都有一個(gè)相關(guān)的標記保存屬性和在編輯器中顯示,提供和斷點(diǎn)類(lèi)型相關(guān)的標記擴展點(diǎn)。如果需要斷點(diǎn)被保存,需要指定persistent為true。其內容如下:
評論