• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種面向多虛擬處理器的程序條件斷點技術

      2023-07-05 13:57:04戴麗虹武詠晗
      航天控制 2023年3期
      關鍵詞:編譯器嵌入式軟件斷點

      王 洋,申 彪,彭 亮,戴麗虹,武詠晗

      北京航天自動控制研究所,北京 100854

      0 引言

      嵌入式軟件虛擬化仿真技術是通過模擬目標機嵌入式處理器及外設指令級行為,結合軟件調(diào)試信息解析和使用技術,使得軟件調(diào)試和測試擺脫對嵌入式目標硬件設備的依賴。

      通過對航天控制領域虛擬化仿真和程序調(diào)試相關文獻的檢索,發(fā)現(xiàn)文獻[1]基于SPARC的嵌入式處理器研究了操作系統(tǒng)的移植方法;文獻[2]利用數(shù)據(jù)分發(fā)服務技術構建了數(shù)據(jù)通路,提出一種處理器之間的通訊解決方案;文獻[3]探索了多核虛擬處理器不同核之間的通信方式,提供了一種快速的多核同步技術;與本文面向通用嵌入式處理器不同,文獻[4]提出了一種針對PLC(可編程邏輯控制器)這類專用嵌入式軟件的斷點控制技術。

      仿真技術和調(diào)試技術是現(xiàn)代軟件調(diào)試的重要技術,通常目標文件代碼段、數(shù)據(jù)段是仿真器的輸入,目標文件代碼段反匯編生成匯編指令序列,仿真模型完成匯編指令的取指、翻譯、執(zhí)行以及處理器外設的仿真。調(diào)試器以目標文件中調(diào)試信息段作為輸入,通過解析和識別源代碼中行信息、符號信息配合仿真器完成調(diào)試工作。

      條件斷點技術是軟件調(diào)試技術的重要技術分支,通常應用于某一種處理器架構下的程序調(diào)試功能。與基于X86處理器和Windows操作系統(tǒng)API的程序斷點技術不同[5],基于軟件仿真技術的條件斷點運行在嵌入式虛擬處理器上而非真實的處理器。如何實現(xiàn)面向不同編譯器、嵌入式虛擬處理器的程序條件斷點控制是一個重要的技術問題,本文提出的面向多虛擬處理器的程序條件斷點技術支持多種編譯器、多種嵌入式處理器架構,主要創(chuàng)新內(nèi)容如下:

      1)提出一種通用的調(diào)試信息存儲結構;

      2)提出一種條件斷點控制技術;

      3)提出一種通用架構條件斷點控制模型;

      4)基于通用條件斷點控制模型開發(fā)調(diào)試器DIP并完成了功能測試。

      1 一種通用的調(diào)試信息存儲結構

      1.1 問題提出

      嵌入式軟件目標文件格式的組合方式有多種,運行嵌入式軟件的目標處理器架構也不同,例如CC編譯器生成目標文件為COFF加DWARF組合,目標處理器為DPS架構、GCC編譯器生成目標文件為ELF加STABS組合,目標處理器為SPARC架構、ARM某編譯器采用ELF加DWARF組合,目標處理器為ARM架構。如何構建通用的仿真調(diào)試模型來兼容多種編譯器和多種處理器,如何構建通用的條件斷點模型,實現(xiàn)不同嵌入式軟件深層次缺陷快速定位成為重要問題,為解決上述問題,本文提出了面向多虛擬處理器的程序條件斷點技術。

      1.2 DWARF和STABS調(diào)試信息結構

      DWARF[6](Debug with Arbitrary Record Format)調(diào)試信息保存在目標文件原始信息數(shù)據(jù)結構中,該數(shù)據(jù)結構定義如表1所示。

      表1 DWARF主要節(jié)區(qū)定義

      DWARF以樹狀結構保存各個編譯單元的序言數(shù)據(jù)、符號調(diào)試信息數(shù)據(jù)、行號調(diào)試信息數(shù)據(jù)。此時,全部調(diào)試信息是未經(jīng)過重新組織的,編譯單元、函數(shù)、局部變量、全局變量、數(shù)據(jù)類型的壓縮信息分散在不同的數(shù)據(jù)結構中。

      調(diào)試信息單元DIE(Debugging Information Entry)是符號結構信息(.debug_info)的基本單位,DIE中包括一個標簽和多個屬性,每個DIE節(jié)點與它的兄弟節(jié)點或子節(jié)點連接構成樹形結構。假設在main.c中定義兩個函數(shù)function1和function2,function1函數(shù)中定義了變量var1。則main.c具備編譯單元標簽以及名稱屬性、編譯路徑屬性、目標碼覆蓋范圍等屬性,function1和function2是main.c的子節(jié)點且互為兄弟節(jié)點,function1和function2具備子程序標簽以及函數(shù)名屬性、函數(shù)起地址范圍等屬性。Var1作為function1的子節(jié)點具備變量標簽、局部存儲屬性、變量名屬性、變量位置等屬性,因此不難發(fā)現(xiàn)main.c中的DIE構成具有2個兄弟節(jié)點的3級樹形結構。

      DIE中描述的函數(shù)、全局變量、局部變量等保存的位置可能在內(nèi)存、堆棧、寄存器中。符號的位置信息(.debug_loc)保存函數(shù)的棧幀信息和全局變量的靜態(tài)位置信息、局部變量的動態(tài)位置變化信息。

      行號調(diào)試信息(.debug_line)構建了源代碼行信息與目標碼行信息的對應關系,當處理器運行至特點目標碼時,用戶可以根據(jù)上述對應關系,確定程序運行的源碼行。

      STABS[7](String Tables)調(diào)試信息中符號和行號調(diào)試信息是以條目化的數(shù)據(jù)項形式存在的,STABS分為符號和行號調(diào)試信息,分別用.stabs條目和.stabn條目表示。

      .stabs條目包括string,type,desc和value字段,其中string表示符號名稱(例如上文中main.c,function1,function2和var1),desc表示符號屬性(例如全局、局部、靜態(tài)等屬性),value表示符號尋址方式和尋址內(nèi)容(例如內(nèi)存、堆棧偏移、寄存器等)。

      .stabn條目包括type,desc,value和type表示行號類型標識,desc標識源代碼行,value標識目標碼地址或目標碼地址序列的起始地址。

      1.3 一種通用調(diào)試信息存儲結構

      本文提出了一種如圖1所示的通用調(diào)試信息存儲結構,該存儲結構是一種與目標文件格式無關的結構。存儲結構中一個源程序的全部調(diào)試信息存儲在CModule對象中,CModule對象中實例化哈希表。

      一個CModuleInfo對象中保存一個編譯單元全部調(diào)試信息,包括:

      1)函數(shù)信息Map;

      2)局部變量Map;

      3)全局變量Map;

      4)行號信息Map;

      5)數(shù)據(jù)類型信息Map;

      6)當前編譯單元的編號、名稱、起始PC值和結束PC值。

      CFunctionInfo對象包括函數(shù)名、函數(shù)起始PC值、函數(shù)結束PC值、函數(shù)名所在的源代碼行、CSymbolX對象,該對象保存函數(shù)名對應的符號信息,包括:

      1)符號名稱;

      2)符號的類型CTypeX*;

      3)符號的寄存器偏移(局部變量寄存器存儲);

      4)符號的棧幀偏移(局部變量堆棧存儲);

      5)符號的物理地址(全局變量);

      6)符號的存儲類型(寄存器、堆棧、內(nèi)存)。

      CSymbolX*保存局部變量和全局變量的符號信息。CSymbolX對象中保存了當前變量的類型信息CTypeX*,CTypeX包括:

      1)類型名稱、編號;

      2)類型的種類,包括基本類型和結構體、枚舉等多種類型;

      3)指向CTypeX*的對象,此對象非空則表示該類型為指向其他類型的typedef類型;

      4)類型的屬性,包括靜態(tài)屬性、寄存器存儲、參數(shù)存儲、全局存儲、枚舉成員、結構體;

      5)成員、聯(lián)合體成員、函數(shù)成員等;

      6)復合類型如結構體中各個元素的索引系數(shù),包括位索引和字節(jié)索引。

      CSymbolX*的哈希表,用以保存當前類型下引用到得新的符號信息。

      CLineInfo*保存行號調(diào)試信息,CLineInfo對象包括:

      1)源代碼行;

      2)當前源代碼行對應的目標碼序列。

      圖1 通用的調(diào)試信息存儲結構

      2 程序條件斷點控制技術

      2.1 處理器虛擬仿真技術

      嵌入式處理器仿真技術是在宿主機上模擬目標處理器行為,實現(xiàn)圖2所示的嵌入式軟件仿真,一般執(zhí)行過程包括:

      1)反匯編器對嵌入式程序的二進制目標文件的代碼段進行反匯編,生成匯編指令碼;

      2)處理器仿真模型中PC控制邏輯取程序入口PC后,匯編指令執(zhí)行器開始執(zhí)行指令周期循環(huán)(取指、譯碼、執(zhí)行);

      3)仿存模型中保存程序執(zhí)行過程中的靜態(tài)內(nèi)存、堆內(nèi)存、??臻g和寄存器數(shù)據(jù);

      4)斷點控制器注冊處理器外部回調(diào)函數(shù),回調(diào)函數(shù)處理條件斷點事件。

      圖2 虛擬處理器仿真行為模型

      2.2 條件斷點控制技術

      在虛擬處理器架構下,實現(xiàn)條件斷點方式如圖2中程序所示,假設條件斷點的觸發(fā)條件是structX.stFoo.iBar==5,觸發(fā)位置為圖3中第13行。實現(xiàn)條件斷點的控制過程則如下:

      首先,需要對表達式進行詞法和語法分析。本文利用Flex&bsion構建語法樹,語法樹葉子節(jié)點為iBar,iBar的父節(jié)點為stFoo,stFoo的父節(jié)點為structX;

      圖3 條件斷點程序偽代碼

      其次,通用的調(diào)試信息存儲結構CSymbolX*中保存有structX.stFoo.iBar數(shù)據(jù)結構信息, CTypeX*保存有structX和stFoo的結構體類型信息,通過尋址解析邏輯可以獲取iBar的地址;

      最后,行號調(diào)試信息CLineInfo中存有語句structX.stFoo.iBar==i表達式所在圖3所示的源碼行(13行)和該語句對應目標碼的PC,當處理器模型判斷當前處理器的PC與structX.stFoo.iBar==i行所處PC相同時,斷點控制器觸發(fā)函數(shù)回調(diào):

      1)斷點控制器通過iBar地址查詢當前的iBar值,將iBar值傳入回調(diào)函數(shù);

      2)回調(diào)函數(shù)判斷iBar值是否等于5,如果等于5則處理器PC保持,程序暫停;如果不等于5則程序PC增加后繼續(xù)運行。

      2.3 通用條件斷點控制模型

      利用圖4所示的條件斷點控制技術,可以構建圖5所示的通用條件斷點控制模型,該模型包括4個主要部分:

      圖4 條件斷點控制原理圖

      圖5 通用條件斷點控制模型

      第1部分,調(diào)試信息解析邏輯和通用調(diào)試信息存儲模型,調(diào)試信息解析邏輯支持對不同編譯器的調(diào)試信息格式解析,解析格式包括ELF、COFF、Stab、DWARF-v2、DWARF-v3、DWARF-v4以及自定義的調(diào)試信息格式,通用調(diào)試信息存儲模型中保存統(tǒng)一的調(diào)試信息,通用調(diào)試信息包含行號信息、符號信息[8]。

      第2部分,模塊化的虛擬處理器模型和通用的條件斷點控制接口,通用的條件斷點控制接口適配不同處理器,接口中統(tǒng)一處理來自FLEX&BISON注冊的回調(diào)函數(shù),處理過程如圖6所示。

      圖6 調(diào)試器DIP架構圖

      第3部分,FLEX&BISON引擎,引擎具備3個主要功能:

      1)FLEX&BISON引擎將條件斷點表達式解析為符號樹,符號樹種全部變量的地址和類型等信息通過查詢通用調(diào)試信息存儲結構獲取;

      2)FLEX&BISON引擎解析條件表達式,以函數(shù)回調(diào)的形式,注冊在通用斷點控制接口中,滿足斷點表達式條件時,虛擬處理器暫停運行;

      3)FLEX&BISON引擎收到虛擬處理器暫停運行消息后,通知前端調(diào)試器暫停在條件斷點所在的源碼行。

      第4部分,前端調(diào)試器。前端調(diào)試器用于顯示條件斷點,顯示當前調(diào)試的源代碼等。

      3 軟件實現(xiàn)與驗證

      基于通用架構條件斷點控制模型開發(fā)了調(diào)試DIP,軟件實現(xiàn)架構如圖6所示[9]。

      調(diào)試器實現(xiàn)了對DWARF和STABS調(diào)試信息的解析,支持通用的調(diào)試信息存儲格式,支持SPARC、DPS、ARM的處理器的仿真,支持前端用戶界面,實現(xiàn)面向多編譯器和多處理器的條件斷點控制。

      為了考核條件斷點調(diào)試解析功能的正確性、多編譯器和虛擬處理器兼容能力,在表2所示的硬件場景進行了測試。

      表2 測試平臺硬件指標

      考核7項內(nèi)容,設計功能測試用例1203個,詳細考核情況如表3所示。

      表3 條件斷點支持情況

      例如針對通用條件斷點處理功能,如表4所示,測試用例考核了等于、大于、小于條件判斷,考核結構體、聯(lián)合體成員的符號判斷邏輯,考核程序特定語句命中次數(shù)的判斷邏輯,通過條件斷點功能發(fā)現(xiàn)了多個載人航天型號控制系統(tǒng)嵌入式軟件問題。

      表4 通用條件斷點處理邏輯支持情況

      4 結論

      隨著航天領域嵌入式軟件種類和復雜度增加,調(diào)試器從面向單一編譯器發(fā)展為面向多編譯器架構,為滿足航天領域多種類型嵌入式軟件的研發(fā)和測試需求,提出了一種通用的調(diào)試信息存儲結構、一種條件斷點控制技術和一種通用架構條件斷點控制模型,基于通用架構條件斷點控制模型開發(fā)了調(diào)試器DIP,將條件斷點技術應用于載人航天、探月工程等多個核心關鍵嵌入式軟件測試中。通過使用通用的條件斷點功能,更容易發(fā)現(xiàn)不同嵌入式軟件中的深層軟件問題,在未來,以上技術將在更多航天型號嵌入式軟件測試中得到驗證和應用。

      猜你喜歡
      編譯器嵌入式軟件斷點
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
      一類無限可能問題的解法
      實時嵌入式軟件的測試技術
      電子測試(2018年10期)2018-06-26 05:54:08
      全景相機遙控器嵌入式軟件V1.0 相關操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      主導電回路發(fā)生斷點故障判斷方法探討
      基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設計與實現(xiàn)
      航天嵌入式軟件浮點運算誤差分析與控制
      通用NC代碼編譯器的設計與實現(xiàn)
      TKScope仿真調(diào)試Cortex-M3內(nèi)核的高級手段
      基于屬性重要性的貪心算法的改進算法
      叶城县| 临城县| 宝应县| 玛纳斯县| 绥化市| 团风县| 韶关市| 泰来县| 巨鹿县| 法库县| 锡林浩特市| 浮梁县| 扎兰屯市| 乃东县| 南和县| 泽普县| 天全县| 夏河县| 扶沟县| 札达县| 日土县| 乌鲁木齐市| 彩票| 定远县| 千阳县| 定兴县| 滨州市| 华坪县| 隆安县| 望江县| 文山县| 灵武市| 区。| 勐海县| 江西省| 四川省| 宜宾县| 武安市| 毕节市| 桦川县| 伽师县|