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