專利名稱:在嵌入式系統模擬器上調試應用程序的方法
技術領域:
本發明涉及計算機程序調試技術,特別是在嵌入式系統模擬器上調試應用程序的方法。
背景技術:
隨著嵌入式設備普及,例如個人數字助手(PDA),手機等,基于便攜移動設備的應用大量涌現。而嵌入式設備上的應用程序一般都在與目標平臺異構的機器環境下開發,不能在開發環境下調試,且嵌入式設備的開發評估的硬件仿真設備一般都比較昂貴,因此調試成為制約著嵌入式軟件開發的重要因素。
計算機系統模擬器技術是在某種架構的計算機中通過模擬目標架構計算機的硬件特征和其指令執行的過程,從而實現在一臺計算機上虛擬出多臺計算機的技術。流行的計算機系統模擬器例如Bochs,可以在多種體系結構的機器上模擬多臺Intel 80×86體系的計算機,并運行Linux、freebsd等操作系統的Intel80×86版本;armulator,可以在Intel 80×86體系結構的機器上模擬ARM體系的計算機,并運行ucLinux的ARM移植版本等。
利用計算機系統模擬器的特點,在模擬器上進行嵌入式軟件的調試成為解決嵌入式系統調試問題的一種解決方案,但是現有的基于模擬器的調試技術通常只能調試運行于嵌入式系統模擬器上的操作系統,而對操作系統之上的應用程序無能為力,這限制了基于模擬器調試技術發揮作用的空間;或者通過在操作系統上額外運行調試器,例如gdb,但如果在該操作系統上無可用的調試器(如ucLinux),則無法使用;或者在操作系統上運行調試器代理,例如gdb server,但要求模擬器支持虛擬的網絡連接同時操作系統必須實現TCP/IP等網絡協議棧,而這些要求許多嵌入式操作系統不能滿足,即時滿足,也增加了模擬器執行的程序,影響模擬器性能。
進程是計算機程序執行的基本單位,也是調試的基本單位。關于進程的基本信息都儲存在操作系統的進程控制塊結構中,包括待調試進程的唯一標識和進程的上下文信息(與CPU相關的狀態,包括寄存器,頁表基址,段基址等)。因而透過模擬器上的操作系統調試應用軟件的關鍵就在于獲得操作系統內存空間中的進程控制塊信息。
發明內容
本發明的目的在于提供一種在嵌入式系統模擬器上調試應用程序的方法。
本發明采用的技術方案是1)調試器使用者指定待調試應用程序在模擬器上操作系統中的進程標識號;2)符號分析加載模塊,對操作系統編譯時生成的內核符號表進行掃描分析,得到進程控制塊結構實例的內存地址,并遍歷所有進程控制塊結構實例,根據步驟1)中指定的進程標識號取得待調試應用程序的進程控制塊的內存地址,根據操作系統支持虛地址與否,該內存地址可能是虛擬地址,也可能是物理地址;3)虛擬內存訪問模塊,如果操作系統支持虛地址機制,則該模塊實現與模擬器上運行的操作系統同樣的地址轉換算法,根據2)中獲得的虛地址計算出對應的物理地址,如若遇見所對應的內存頁不在物理內存中,則需將其從模擬文件系統中所在的塊號并將頁加載至內存,若上層運行的操作系統不支持虛地址機制,則本步驟可以省去;4)調試接口模塊,該模塊接受來自程序開發人員的各種調試指令,送至調試代理模塊,并將調試代理模塊接受指令后產生的調試信息接受并顯示;5)調試代理模塊,該模塊收到調試接口傳來的調試指令,若調試指令為插入斷點,則將目的斷點地址對應的指令修改為自行定義格式的斷點指令,被覆蓋的原指令連同斷點位置被保存下來,當虛擬機遇到該斷點指令時,則停機等待從調試器發過來的調試指令;若調試指令為現場查詢指令或現場修改指令,則根據2)中獲得的進程控制塊中存儲的信息針對屬于進程的內存地址或者由模擬器模擬的寄存器進行相應的操作;若調試指令為繼續執行,則將保存的原指令恢復,讓虛擬機恢復運行狀態;若為顯示進程列表指令,則調用符號分析加載模塊根據2)所述獲取進程列表數據結構在內核中的內存地址,并遍歷該結構;若為指定調試進程指令,則在模擬器內部維護一個當前調試進程信息的數據結構。
本發明和技術相比具有的有益的效果是其優勢在于不需要操作系統的網絡支持,不需要運行額外的調試器程序,從而避免了嵌入式操作系統上缺乏調試器的問題;同時,本方法不在虛擬器的操作系統上執行額外的程序,提高了模擬器的性能,改善響應速度。
具體實施例方式
某ARM模擬器中,實現了對ARMv4版本指令的解釋執行,模擬了Atmel公司AT91EV40開發板,在其上能夠運行ucLinux版本2.0.0。該版本ucLinux編譯時生成內核符號文件為/boot/system.map。待調試的程序名假設為debuggedproc,調試器為debugger,模擬器名為simon,在模擬器中實現了符號分析加載模塊、虛擬內存訪問模塊、調試代理模塊。同時在另外獨立運行的調試器客戶端中包含了調試接口模塊,該模塊和模擬器的調試代理模塊通過套接字進行通訊,通訊格式遵循GDB遠程調試協議。
1)調試器debugger通過符號分析加載模塊獲取的進程列表來確定待調試程序debuggedproc在目標操作系統上的進程ID,假設為1000。此時,調試器可以通過attach 1000指令根據技術方案中1)所述指定待調試的進程ID。
2)符號分析加載模塊,對操作系統編譯時生成的內核符號表system.map進行掃描分析,得到進程控制塊結構數組task對應的內存地址,task數組中的項為進程控制塊結構,通過遍歷所有進程控制塊結構實例,根據技術方案中1)中指定的進程標識號取得待調試應用程序的進程控制塊的內存地址。根據操作系統支持虛地址與否,該內存地址可能是虛擬地址,也可能是物理地址;3)虛擬內存訪問模塊,如果操作系統支持虛地址機制,則該模塊實現與模擬器上運行的操作系統同樣的地址轉換算法,根據技術方案中1)中獲得的虛地址計算出對應的物理地址,如若遇見所對應的內存頁不在物理內存中,則需進一步解析進程控制塊結構中的內存數據結構來獲取其在模擬文件系統或交換文件中所在的塊號并將頁加載至內存;若上層運行的操作系統不支持虛地址機制,則本步驟可以省去;4)調試接口模塊,該模塊接受來自程序開發人員的各種調試指令(如顯示進程列表、指定調試進程、查看內存、修改內存、插入斷點、查看斷點、刪除斷點、查看寄存器、修改寄存器、單步執行等),依據gdb遠程調試協議格式的要求解析出調試指令及其調試參數并送至調試代理模塊,并將調試代理模塊接受指令后產生的反饋調試信息接受并顯示;5)調試代理模塊,該模塊收到調試接口傳來的調試指令及其調試參數,若調試指令為插入斷點,則將目的斷點地址對應的指令修改為自行定義格式的斷點指令,被覆蓋的原指令連同斷點位置被保存下來,當虛擬機遇到該指令時,則停機等待其它調試指令;若調試指令為現場查詢指令或現場修改類指令,則根據技術方案中2)中獲得的進程控制塊中存儲的信息針對屬于進程的內存地址或者由模擬器模擬的寄存器進行相應的操作;若調試指令為繼續執行,則將保存的原指令恢復,讓虛擬機恢復運行狀態。若為顯示進程列表指令,則調用符號分析加載模塊根據技術方案中2)所述獲取進程列表數據結構在內核中的內存地址,并遍歷該結構。若為指定調試進程指令,則在模擬器內部維護一個當前調試進程信息的數據結構。
使用本方法不需要在ucLinux下運行額外的調試程序(例如GDB),也不要求該ucLinux實現TCP/IP協議,極大的減少了模擬器在解析這些程序或協議的指令時所造成的性能損耗。
權利要求
1 一種用在嵌入式系統模擬器上調試應用程序的方法,其特征在于1)調試器使用者指定待調試應用程序在模擬器上操作系統中的進程標識號;2)符號分析加載模塊,對操作系統編譯時生成的內核符號表進行掃描分析,得到進程控制塊結構實例的內存地址,并遍歷所有進程控制塊結構實例,根據步驟1)中指定的進程標識號取得待調試應用程序的進程控制塊的內存地址,根據操作系統支持虛地址與否,該內存地址可能是虛擬地址,也可能是物理地址;3)虛擬內存訪問模塊,如果操作系統支持虛地址機制,則該模塊實現與模擬器上運行的操作系統同樣的地址轉換算法,根據2)中獲得的虛地址計算出對應的物理地址,如若遇見所對應的內存頁不在物理內存中,則需將其從模擬文件系統中所在的塊號并將頁加載至內存,若上層運行的操作系統不支持虛地址機制,則本步驟可以省去;4)調試接口模塊,該模塊接受來自程序開發人員的各種調試指令,送至調試代理模塊,并將調試代理模塊接受指令后產生的調試信息接受并顯示;5)調試代理模塊,該模塊收到調試接口傳來的調試指令,若調試指令為插入斷點,則將目的斷點地址對應的指令修改為自行定義格式的斷點指令,被覆蓋的原指令連同斷點位置被保存下來,當虛擬機遇到該斷點指令時,則停機等待從調試器發過來的調試指令;若調試指令為現場查詢指令或現場修改指令,則根據2)中獲得的進程控制塊中存儲的信息針對屬于進程的內存地址或者由模擬器模擬的寄存器進行相應的操作;若調試指令為繼續執行,則將保存的原指令恢復,讓虛擬機恢復運行狀態;若為顯示進程列表指令,則調用符號分析加載模塊根據2)所述獲取進程列表數據結構在內核中的內存地址,并遍歷該結構;若為指定調試進程指令,則在模擬器內部維護一個當前調試進程信息的數據結構。
全文摘要
本發明公開了在嵌入式系統模擬器上調試應用程序的方法。本發明的方法通過讀取操作系統編譯時生成的內核符號文件,得到位于模擬器內存中的應用程序進程控制塊信息,從而獲得對應用程序的控制能力,實現對運行于模擬器中操作系統之上的應用程序的調試。其優勢在于不需要操作系統的網絡支持,不需要運行額外的調試器程序,從而避免了嵌入式操作系統上缺乏調試器的問題;同時,本方法不在虛擬器的操作系統上執行額外的程序,提高了模擬器的性能,改善響應速度。
文檔編號G06F11/36GK1645339SQ200510049298
公開日2005年7月27日 申請日期2005年1月31日 優先權日2005年1月31日
發明者卜佳俊, 陳純, 沈格俊, 趙軍, 柯化成 申請人:浙江大學