專利名稱:一種嵌入式系統(tǒng)的調(diào)試方法、調(diào)試轉(zhuǎn)換裝置和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種嵌入式系統(tǒng)的調(diào)試方法、調(diào)試轉(zhuǎn)換裝置和系統(tǒng)。
背景技術(shù):
嵌入式系統(tǒng)通常是面向特定應(yīng)用的,它對邏輯的執(zhí)行順序和執(zhí)行時間要求非常嚴(yán)格。嵌入式系統(tǒng)適用于對功能、可靠性、成本、體積、功耗要求嚴(yán)格的專用系統(tǒng)。對于嵌入式系統(tǒng)的軟件開發(fā)也不同于通用應(yīng)用軟件,前者要求開發(fā)者對嵌入式系統(tǒng)的硬件有足夠的了解,開發(fā)一個好的嵌入式系統(tǒng)的軟件非常困難,因此非常有必要有適合嵌入式系統(tǒng)的調(diào)試器。
現(xiàn)有的嵌入式調(diào)試方式主要有兩種方式:一種是在線調(diào)試,另外一種是離線調(diào)試。
嵌入式系統(tǒng)的在線調(diào)試的方案通常如下:部署調(diào)試器服務(wù)端在嵌入式單板(即:目標(biāo)板)上,部署調(diào)試器客戶端在PC (personal computer,個人計算機(jī))上,客戶端和服務(wù)端通過網(wǎng)口或串口等通道連接。服務(wù)端負(fù)責(zé)訪問或控制嵌入式系統(tǒng)的資源(比如,內(nèi)存、寄存器等),PC機(jī)上的客戶端負(fù)責(zé)接受用戶的命令輸入,進(jìn)行命令解析、調(diào)試信息解析和被調(diào)試程序的實時/非實時分析,以及調(diào)試分析結(jié)果輸出等。
在線調(diào)試又包括非實時調(diào)試方式(即:stop調(diào)試方式),實時調(diào)試方式(即:non-stop調(diào)試方式)。Stop調(diào)試方式需要先將被調(diào)試程序停止,然后分析程序的信息和狀態(tài)。non-stop調(diào)試方式則可實時獲取程序的相關(guān)狀態(tài)信息等。這兩種在線調(diào)試方式都存在缺陷,具體如下:
(I)、如果某時刻調(diào)試器的客戶端與目標(biāo)板的服務(wù)端的連接中斷,則程序出現(xiàn)異常。這時由于調(diào)試器的客戶端無法獲取被調(diào)試程序的實時情況,也無法控制被調(diào)試程序的狀態(tài),導(dǎo)致在線調(diào)試方式失效。
(2)、由于程序的異常通常具有隨機(jī)性和不可復(fù)現(xiàn)性,導(dǎo)致將該類問題的復(fù)現(xiàn)難度較大,在線調(diào)試的失效將導(dǎo)致問題定位和分析的效率降低。
離線測試的方案,由于測試過程在目標(biāo)板完成,不存在目標(biāo)板與調(diào)試器之間的連接;因此可以避免上述技 術(shù)缺陷,離線調(diào)試的方案通常如下:目標(biāo)板將包括備份的轉(zhuǎn)儲文件,備份的轉(zhuǎn)儲文件包含有寄存器信息、內(nèi)存信息和操作系統(tǒng)信息等;目標(biāo)板在調(diào)試器上離線的獲取調(diào)試信息以及上述備份的轉(zhuǎn)儲文件,然后對程序異常原因進(jìn)行分析。但是離線調(diào)試也存在如下缺陷:
由于目標(biāo)板運行的平臺種類繁多,備份的轉(zhuǎn)儲文件中包含操作系統(tǒng)以及目標(biāo)板平臺有關(guān)的信息,因此備份的轉(zhuǎn)儲文件在格式上存在差異。另外,在目標(biāo)板的系統(tǒng)軟件開發(fā)階段,該系統(tǒng)軟件的版本升級通常很快,然而對不同版本系統(tǒng)軟件對應(yīng)的轉(zhuǎn)儲文件格式又存在差異。因此,調(diào)試器客戶端在實現(xiàn)支持不同平臺的轉(zhuǎn)儲文件,或支持相同平臺不同版本的轉(zhuǎn)儲文件,則需要對調(diào)試器客戶端進(jìn)行大量改動。這樣,為了解決調(diào)試器客戶端與平臺在文件格式支持上的矛盾,仍然需要修改調(diào)試器客戶端,而往往修改調(diào)試器需要大量的人力和時間。綜上所述,離線調(diào)試由于需要不斷修改調(diào)試器客戶端來實現(xiàn)離線調(diào)試,導(dǎo)致實現(xiàn)離線分析的難度較大、成本較高、時間長。另外,在線調(diào)試和離線調(diào)試的調(diào)試工具需要分別開發(fā),存在重復(fù)開發(fā)的問題。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種嵌入式系統(tǒng)的調(diào)試方法、調(diào)試轉(zhuǎn)換裝置和系統(tǒng),用于增加在線調(diào)試工具的使用范圍,縮短離線調(diào)試工具的開發(fā)時間,降低開發(fā)成本。本發(fā)明實施例一方面提供了一種嵌入式系統(tǒng)的調(diào)試方法,包括:獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則;在接收到在線調(diào)試命令的源碼后,按照所述轉(zhuǎn)換規(guī)則,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼;將所述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。結(jié)合一方面的實現(xiàn)·方式,在第一種可選的實現(xiàn)方式中,所述將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼,將所述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板包括:將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;將得到的離線命令源碼和當(dāng)前的調(diào)試器客戶端,進(jìn)行二次編譯生成支持離線調(diào)試的調(diào)試器客戶端,將所述支持離線調(diào)試的調(diào)試器客戶端發(fā)送給目標(biāo)板;或者,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的代碼并鏈接為動態(tài)庫,將所述動態(tài)庫發(fā)送給目標(biāo)板。結(jié)合第一種可選的實現(xiàn)方式,在第二種可選的實現(xiàn)方式中,所述將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼包括:使用編譯器將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼;或者,通過客戶端工具將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼。結(jié)合第二種可選的實現(xiàn)方式,在第三種可選的實現(xiàn)方式中,所述使用編譯器將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼包括:讀入所述在線調(diào)試命令的源碼,根據(jù)所述轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配,若匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元,然后輸出離線調(diào)試命令的源碼。結(jié)合一方面、第一種、第二種或第三種可選的實現(xiàn)方式,在第四種可選的實現(xiàn)方式中,所述轉(zhuǎn)換規(guī)則包括:符號表信息轉(zhuǎn)換規(guī)則、寄存器及調(diào)用棧規(guī)則、調(diào)試輸出接口轉(zhuǎn)換規(guī)則、內(nèi)存分布規(guī)則中的至少一項;所述符號表信息轉(zhuǎn)換規(guī)則為:在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則;所述寄存器及調(diào)用棧規(guī)則為:通用寄存器個數(shù),函數(shù)返回地址,棧指針或者個人計算機(jī)PC指針的寄存器配置,以及函數(shù)調(diào)用棧信息;所述調(diào)試輸出接口轉(zhuǎn)換規(guī)則為:在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口的規(guī)則;
所述內(nèi)存分布規(guī)則為:確定私有內(nèi)存或者共享內(nèi)存的大小及分布的規(guī)則。
本發(fā)明實施例二方面提供了一種嵌入式系統(tǒng)的調(diào)試轉(zhuǎn)換裝置,包括:
規(guī)則獲取單元,用于獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則;
源碼接收單元,用于接收在線調(diào)試命令的源碼;
轉(zhuǎn)換單元,用于在所述源碼接收單元接收到在線調(diào)試命令的源碼后,按照所述規(guī)則獲取單元獲取到的轉(zhuǎn)換規(guī)則,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼;
發(fā)送單元,用于將所述轉(zhuǎn)換單元得到的支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。
結(jié)合二方面的實現(xiàn)方式,在第一種可選的實現(xiàn)方式中,所述轉(zhuǎn)換單元,具體用于將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;將得到的離線命令源碼和當(dāng)前的調(diào)試器客戶端進(jìn)行二次編譯生成支持離線調(diào)試的調(diào)試器客戶端;或者,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的代碼并鏈接為動態(tài)庫;
所述發(fā)送單元,具體用于將所述轉(zhuǎn)換單元得到的支持離線調(diào)試的調(diào)試器客戶端發(fā)送給目標(biāo)板;或者將所述轉(zhuǎn)換單元得到的動態(tài)庫發(fā)送給目標(biāo)板。
結(jié)合二方面的實現(xiàn)方式,在第二種可選的實現(xiàn)方式中,所述轉(zhuǎn)換單元,具體用于使用編譯器將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼;或者,通過客戶端工具將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼。
結(jié)合第二種的實現(xiàn)方式,在第三種可選的實現(xiàn)方式中,所述轉(zhuǎn)換單元包括:
讀取單元,用于讀入所述源碼接收單元接收的在線調(diào)試命令的源碼;
匹配單元,用于根據(jù)所述規(guī)則獲取單元獲取的轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配;
源碼生成單元,用于若所述匹配單元匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元 ,然后輸出離線調(diào)試命令的源碼。
結(jié)合一方面、第一種、第二種或第三種可選的實現(xiàn)方式,在第四種可選的實現(xiàn)方式中,所述規(guī)則獲取單元,獲取的轉(zhuǎn)換規(guī)則包括:符號表信息轉(zhuǎn)換規(guī)則、寄存器及調(diào)用棧規(guī)則、調(diào)試輸出接口轉(zhuǎn)換規(guī)則、內(nèi)存分布規(guī)則中的至少一項;
所述符號表信息轉(zhuǎn)換規(guī)則為:在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則;
所述寄存器及調(diào)用棧規(guī)則為:通用寄存器個數(shù),函數(shù)返回地址,棧指針或者個人計算機(jī)PC指針的寄存器配置,以及函數(shù)調(diào)用棧信息;
所述調(diào)試輸出接口轉(zhuǎn)換規(guī)則為:在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口的規(guī)則;
所述內(nèi)存分布規(guī)則為:確定私有內(nèi)存或者共享內(nèi)存的大小及分布的規(guī)則。
本發(fā)明實施例三方面提供了一種嵌入式系統(tǒng)的調(diào)試系統(tǒng),包括,調(diào)試器、目標(biāo)板,還包括:本發(fā)明實施例提供的任意一項的調(diào)試轉(zhuǎn)換裝置;
所述調(diào)試轉(zhuǎn)換裝置從所述調(diào)試器的客戶端接收在線調(diào)試命令的源碼,并將支持離線調(diào)試的代碼輸出給所述目標(biāo)板的服務(wù)端。
從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:通過將在線調(diào)試命令進(jìn)行從在線調(diào)試命令的源碼到離線調(diào)試的代碼的轉(zhuǎn)換,實現(xiàn)在線調(diào)試命令的離線調(diào)試,可以解決嵌入式系統(tǒng)軟件的在線調(diào)試和離線調(diào)試的重復(fù)開發(fā)問題,避免對不同的平臺實現(xiàn)離線調(diào)試,或?qū)ο嗤钠脚_實現(xiàn)不同版本的離線調(diào)試時都需要修改調(diào)試器客戶端的問題,因此,可以增加在線調(diào)試工具的使用范圍,縮短離線調(diào)試工具的開發(fā)時間,降低了開發(fā)成本。
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例方法流程示意圖;圖2為本發(fā)明實施例生成離線命令的模塊結(jié)構(gòu)示意圖;圖3為本發(fā)明實施例典型的調(diào)試器組網(wǎng)示意圖;圖4為本發(fā)明實施例在線命令轉(zhuǎn)換成離線命令的流程示意圖;圖5為本發(fā)明實施例源到源轉(zhuǎn)換過程實例示意圖;圖6為本發(fā)明實施例調(diào)試轉(zhuǎn)換裝置結(jié)構(gòu)示意圖;圖7為本發(fā)明實施例調(diào)試轉(zhuǎn)換裝置結(jié)構(gòu)示意圖;圖8為本發(fā)明實施例系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式為了使本發(fā)明 目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實施例僅僅是本發(fā)明一部份實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實施例提供了一種嵌入式系統(tǒng)的調(diào)試方法,如圖1所示,包括:101:獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則;上述在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則,可以是任意可以建立在線調(diào)試命令到離線調(diào)試命令對應(yīng)關(guān)系的規(guī)則,轉(zhuǎn)換規(guī)則可以根據(jù)實際需要增加或者減少,具體的形式本發(fā)明實施例給出了如下舉例:可選地,上述轉(zhuǎn)換規(guī)則包括:符號表信息轉(zhuǎn)換規(guī)則、寄存器及調(diào)用棧規(guī)則、調(diào)試輸出接口轉(zhuǎn)換規(guī)則、內(nèi)存分布規(guī)則中的至少一項;上述符號表信息轉(zhuǎn)換規(guī)則為:在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則;上述寄存器及調(diào)用棧規(guī)則為:通用寄存器個數(shù),函數(shù)返回地址,棧指針或者個人計算機(jī)PC指針的寄存器配置,以及函數(shù)調(diào)用棧信息;上述調(diào)試輸出接口轉(zhuǎn)換規(guī)則為:在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口的規(guī)則;上述內(nèi)存分布規(guī)則為:確定私有內(nèi)存或者共享內(nèi)存的大小及分布的規(guī)則。需要說明的是,代碼轉(zhuǎn)換的規(guī)則可以有很多種類,以上舉例不應(yīng)理解為對本發(fā)明實施例的限定。102:在接收到在線調(diào)試命令的源碼后,按照上述轉(zhuǎn)換規(guī)則,將上述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼;可選地,本發(fā)明實施例給出了兩種可選的支持離線調(diào)試的代碼的方案,如下:上述將上述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼包括:將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;將得到的離線命令源碼和當(dāng)前的調(diào)試器客戶端,進(jìn)行二次編譯生成支持離線調(diào)試的調(diào)試器客戶端;或者,將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的代碼并鏈接為動態(tài)庫。
可選地,本發(fā)明實施例還給出了兩種在線調(diào)試命令到離線調(diào)試命令的源碼到源碼的轉(zhuǎn)換實現(xiàn)方案,具體地:上述將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼包括:使用編譯器將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼;或者,通過客戶端工具將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼。
可選地,本發(fā)明實施例還給出了使用編譯器實現(xiàn)源碼到源碼的轉(zhuǎn)換的具體實現(xiàn)方式,如下:上述使用編譯器將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼包括:讀入上述在線調(diào)試命令的源碼,根據(jù)上述轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配,若匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元,然后輸出離線調(diào)試命令的源碼。
103:將上述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。
以上方案,通過將在線調(diào)試命令進(jìn)行從在線調(diào)試命令的源碼到離線調(diào)試的代碼的轉(zhuǎn)換,實現(xiàn)在線調(diào)試命令的離線調(diào)試,可以解決嵌入式系統(tǒng)軟件的在線調(diào)試和離線調(diào)試的重復(fù)開發(fā)問題,避免對不同的平臺實現(xiàn)離線調(diào)試,或?qū)ο嗤钠脚_實現(xiàn)不同版本的離線調(diào)試時都需要修改調(diào)試器客戶端的問題,因此,可以增加在線調(diào)試工具的使用范圍,縮短離線調(diào)試工具的開發(fā)時間,降低了開發(fā)成本。
可選地,對應(yīng)于前面實施例的兩種可選的支持離線調(diào)試的代碼的方案,上述將上述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板包括:將上述支持離線調(diào)試的調(diào)試器客戶端發(fā)送給目標(biāo)板;或者,將上述動態(tài)庫發(fā)送給目標(biāo)板。
以下實施例分別就結(jié)構(gòu)組成、調(diào)試組網(wǎng)、源碼轉(zhuǎn)換以及實例的角度對以上實施例的方案進(jìn)行更詳細(xì)的舉例說明。
一、結(jié)構(gòu)組成
請參閱圖2所示為:通過源到源轉(zhuǎn)換,生成離線命令的模塊結(jié)構(gòu)示意圖,其中箭頭方向為數(shù)據(jù)流向。
本例中為嵌入式系統(tǒng)開發(fā)的在線和離線調(diào)試器都可以使用C作為編程語言。在線調(diào)試命令源碼(主要是.c和.h文件)作為離線命令轉(zhuǎn)換器的輸入源。
離線命令轉(zhuǎn)換器主要有三個部分:符號解析模塊、轉(zhuǎn)儲文件解析模塊及源到源轉(zhuǎn)換模塊。
符號解析模塊從輸入源中獲取全局符號的定義及地址映射表,以及與業(yè)務(wù)相關(guān)的符號描述信息,進(jìn)行符號解析與處理后,輸出到源到源轉(zhuǎn)換模塊。
源到源轉(zhuǎn)換模塊的另一個輸入來自轉(zhuǎn)儲文件解析模塊,轉(zhuǎn)儲文件解析模塊主要完成對離線文件寄存器及調(diào)用棧規(guī)則的分析與處理,這部分通常與嵌入式系統(tǒng)的ISA(Industrial Standard Architecture,工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)總線)強(qiáng)相關(guān)。
當(dāng)源到源轉(zhuǎn)換模塊獲取到需要的信息后就可以通過內(nèi)部定義好的規(guī)則完成最后的離線調(diào)試命令 源碼(主要是.c和.h文件)的輸出。此時的離線調(diào)試器已經(jīng)具有了在線調(diào)試器模塊擁有的業(yè)務(wù)相關(guān)符號表信息及地址信息,使用離線調(diào)試器的打印接口就可以獲取產(chǎn)品業(yè)務(wù)相關(guān)信息。
二、調(diào)試組網(wǎng)
如圖3所示的典型的調(diào)試器組網(wǎng)示意圖,
在線調(diào)試場景下,位于PC (personal computer,個人計算機(jī))端的調(diào)試器客戶端和位于目標(biāo)板(Board)上的調(diào)試服務(wù)端通過ETH (Ethernet,網(wǎng)口)或者串口等通道進(jìn)行通信。其中在PC側(cè)還包含有IDE (Integrated Development Environment,集成開發(fā)環(huán)境),在Board側(cè)還包含有應(yīng)用程序、系統(tǒng)以及內(nèi)存/寄存器。離線調(diào)試場景下,調(diào)試器客戶端通過文件I/O從個人電腦的轉(zhuǎn)儲文件(Core Fileon PC)中獲取所需要的寄存器/內(nèi)存信息,操作系統(tǒng)信息或產(chǎn)品業(yè)務(wù)信息。三、源碼轉(zhuǎn)換請參閱圖4為:在線命令轉(zhuǎn)換成離線命令的流程示意圖。401:制定在線調(diào)試命令平滑到離線調(diào)試命令的轉(zhuǎn)換規(guī)則;在線調(diào)試命令到離線命令的轉(zhuǎn)換有一套完整的規(guī)則。規(guī)則的定制主要可以包含以下幾部分:符號表信息轉(zhuǎn)換規(guī)則,主要制定將在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則。寄存器及調(diào)用棧規(guī)則,包括通用寄存器個數(shù),函數(shù)返回地址,棧指針及PC指針等寄存器配置,以及函數(shù)調(diào)用棧信息等。調(diào)試輸出接口轉(zhuǎn)換規(guī)則,制定將在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口。內(nèi)存分布規(guī)貝U,確定私有內(nèi)存或者共享內(nèi)存的大小及分布等。可以根據(jù)實際業(yè)務(wù)的需求,添加或者刪減某些規(guī)則。402:使用源碼轉(zhuǎn)換編譯器將在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;
本步驟的轉(zhuǎn)換的基本原理可以為:讀入在線調(diào)試命令的源碼,根據(jù)上述制定的轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配。如果匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元,再由編譯器輸出最后的離線調(diào)試命令的源碼。403:通過將402中生成的離線調(diào)試命令的源碼連同架構(gòu)及轉(zhuǎn)換無關(guān)的離線調(diào)試的源碼,編譯在一起即可生成新的離線調(diào)試器客戶端。以上方案步驟402和403均可以采用其他方式進(jìn)行替換,具體如下:上述流程示意圖4中的402是采用了源碼轉(zhuǎn)換編譯器將在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼。替代方案可以不依賴于編譯器,單獨實現(xiàn)一個將在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼的轉(zhuǎn)換客戶端工具。也就是說轉(zhuǎn)換工具可以脫離編譯器,客戶端工具具備解析流程圖規(guī)則,生成最終源碼的功能。流程示意圖4中的402另一種替代方案是通過編譯器,將轉(zhuǎn)換出來的離線命令的代碼(主要是.c和.h文件)鏈接成一個動態(tài)庫(.dll或.so格式)。那么403中的二次編譯就可以省略,離線的調(diào)試器客戶端只需要動態(tài)加載402中生成的動態(tài)庫就能完成相應(yīng)的調(diào)試功能。四、實例以下是一種實施場景:請參閱圖5所示為一個源到源轉(zhuǎn)換過程實例,該實例以查詢當(dāng)前系統(tǒng)的CPU(Central Processing Unit,中央處理器)負(fù)載率為例,圖5采用C語言編寫,可參考C語言編寫的相關(guān)規(guī)范,其中左側(cè)一列為在線調(diào)試命令的源碼,右側(cè)箭頭指向的是與之對應(yīng)的離線調(diào)試命令的源碼,該實例將在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼的過程。主要分為三個步驟:1、識別出該命令實現(xiàn)中的全局變量。這是一個業(yè)務(wù)相關(guān)的全局變量,首先是要具有識別這個業(yè)務(wù)符號的轉(zhuǎn)換規(guī)則。規(guī)則很簡單,識別引號內(nèi)的字符串(即圖5中,上面的大框中的最上一個虛線框內(nèi)的粗體字內(nèi)容)。
離線命令轉(zhuǎn)換器不斷讀入輸入文件(即圖5左側(cè)側(cè)代碼),當(dāng)識別到DSP_LkAddr關(guān)鍵字時(這是一個業(yè)務(wù)查詢符號地址的調(diào)用接口,在規(guī)則制定的時候,會把這個接口調(diào)用配置在規(guī)則內(nèi),用于字符串的匹配),離線命令轉(zhuǎn)換器匹配到這個關(guān)鍵字后面的用雙引號括起來的字符串,在這個例子中就是gstruCpuLoad。附帶的隱含轉(zhuǎn)換規(guī)則是將原有結(jié)構(gòu)體成員調(diào)用轉(zhuǎn)換為已識別字符串的成員調(diào)用,如struCpuLoad.uwCurLoad---->gstruCpuLoad.uwCurLoad,這個轉(zhuǎn)換結(jié)果將作為下面函數(shù)調(diào)用轉(zhuǎn)換接口的輸入。如圖5所示的箭頭所示的轉(zhuǎn)換對應(yīng)關(guān)系。
2、獲取全局變量值的函數(shù)調(diào)用,替換成離線調(diào)試客戶端中的函數(shù)調(diào)用。
如圖5中,將在線查詢業(yè)務(wù)變量地址的調(diào)用接口 DSP_CommRead轉(zhuǎn)換成相應(yīng)的離線調(diào)用接口 getSymAddrSize,同時把上面 struCpuLoad.uwCurLoad---->gstruCpuLoad.uwCurLoad轉(zhuǎn)換結(jié)果作為接口參數(shù)傳入。
3、命令返回結(jié)果輸出的函數(shù)調(diào)用替換成離線調(diào)試客戶端的函數(shù)調(diào)用。
全局符號及獲取全局量的接口轉(zhuǎn)換完成后,就可以實現(xiàn)最后一步平臺打印輸出接口的轉(zhuǎn)換,這個轉(zhuǎn)換了實現(xiàn)了最后調(diào)試結(jié)果輸出切換的功能。比如本例中的在線調(diào)試接口LBB_DSP_Printf轉(zhuǎn)換到離線打印接口 printf。
采用以上方案,由于嵌入式系統(tǒng)軟件的在線調(diào)試和離線調(diào)試應(yīng)用于不同的場景,且都是必不可少的調(diào)試方式。本發(fā)明實施例實現(xiàn)在線調(diào)試命令的離線調(diào)試,可以解決嵌入式系統(tǒng)軟件的在線調(diào)試和離線調(diào)試的重復(fù)開發(fā)問題,通過將在線調(diào)試命令進(jìn)行從在線調(diào)試命令的源碼到離線調(diào)試的代碼的轉(zhuǎn)換,轉(zhuǎn)換成可以在PC機(jī)上使用的離線調(diào)試命令,以及將命令中涉及到的產(chǎn)品業(yè)務(wù)信息使用符號解析功能轉(zhuǎn)換成地址和長度,離線命令通過查詢相應(yīng)的內(nèi)存地址區(qū)間即可以獲取系統(tǒng)相關(guān)信息。實現(xiàn)在線調(diào)試命令的離線調(diào)試可以避免對不同的平臺實現(xiàn)離線調(diào)試,或?qū)ο嗤钠脚_實現(xiàn)不同版本的離線調(diào)試時都需要修改調(diào)試器客戶端的問題,因此,本發(fā)明方法可以增加在線調(diào)試工具的使用范圍,縮短離線調(diào)試工具的開發(fā)時間,降低了開發(fā)成本。
本發(fā)明實施例還提供了一種嵌入式系統(tǒng)的調(diào)試轉(zhuǎn)換裝置,如圖6所示,包括:
規(guī)則獲取單元601,用于獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則;
源碼接收單元602,用 于接收在線調(diào)試命令的源碼;
轉(zhuǎn)換單元603,用于在上述源碼接收單元602接收到在線調(diào)試命令的源碼后,按照上述規(guī)則獲取單元601獲取到的轉(zhuǎn)換規(guī)則,將上述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼;
發(fā)送單元604,用于將上述轉(zhuǎn)換單元603得到的支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。
以上方案,通過將在線調(diào)試命令進(jìn)行從在線調(diào)試命令的源碼到離線調(diào)試的代碼的轉(zhuǎn)換,實現(xiàn)在線調(diào)試命令的離線調(diào)試,可以解決嵌入式系統(tǒng)軟件的在線調(diào)試和離線調(diào)試的重復(fù)開發(fā)問題,避免對不同的平臺實現(xiàn)離線調(diào)試,或?qū)ο嗤钠脚_實現(xiàn)不同版本的離線調(diào)試時都需要修改調(diào)試器客戶端的問題,因此,可以增加在線調(diào)試工具的使用范圍,縮短離線調(diào)試工具的開發(fā)時間,降低了開發(fā)成本。
可選地,上述轉(zhuǎn)換單元603,具體用于將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;將得到的離線命令源碼和當(dāng)前的調(diào)試器客戶端進(jìn)行二次編譯生成支持離線調(diào)試的調(diào)試器客戶端;或者,將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的代碼并鏈接為動態(tài)庫;上述發(fā)送單元604,具體用于將上述轉(zhuǎn)換單元603得到的支持離線調(diào)試的調(diào)試器客戶端發(fā)送給目標(biāo)板;或者將上述轉(zhuǎn)換單元603得到的動態(tài)庫發(fā)送給目標(biāo)板??蛇x地,上述轉(zhuǎn)換單元603,具體用于使用編譯器將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼;或者,通過客戶端工具將上述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼。可選地,如圖7所示,上述轉(zhuǎn)換單元603包括:讀取單元701,用于讀入上述源碼接收單元602接收的在線調(diào)試命令的源碼;匹配單元702,用于根據(jù)上述規(guī)則獲取單元601獲取的轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配;源碼生成單 元704,用于若上述匹配單元702匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元,然后輸出離線調(diào)試命令的源碼??蛇x地,上述規(guī)則獲取單元601,獲取的轉(zhuǎn)換規(guī)則包括:符號表信息轉(zhuǎn)換規(guī)則、寄存器及調(diào)用棧規(guī)則、調(diào)試輸出接口轉(zhuǎn)換規(guī)則、內(nèi)存分布規(guī)則中的至少一項;上述符號表信息轉(zhuǎn)換規(guī)則為:在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則;上述寄存器及調(diào)用棧規(guī)則為:通用寄存器個數(shù),函數(shù)返回地址,棧指針或者個人計算機(jī)PC指針的寄存器配置,以及函數(shù)調(diào)用棧信息;上述調(diào)試輸出接口轉(zhuǎn)換規(guī)則為:在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口的規(guī)則;上述內(nèi)存分布規(guī)則為:確定私有內(nèi)存或者共享內(nèi)存的大小及分布的規(guī)則。本發(fā)明實施例還提供了一種嵌入式系統(tǒng)的調(diào)試系統(tǒng),如圖8所示,包括,調(diào)試器801、目標(biāo)板803,還包括:本發(fā)明實施例提供的任意一種調(diào)試轉(zhuǎn)換裝置802 ;上述調(diào)試轉(zhuǎn)換裝置802從上述調(diào)試器801的客戶端接收在線調(diào)試命令的源碼,并將支持離線調(diào)試的代碼輸出給上述目標(biāo)板803的服務(wù)端。值得注意的是,上述調(diào)試轉(zhuǎn)換裝置實施例中,所包括的各個單元只是按照功能邏輯進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù)范圍。另外,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述各方法實施例中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,相應(yīng)的程序可以存儲于一種計算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。以上僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明實施例揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種嵌入式系統(tǒng)的調(diào)試方法,其特征在于,包括: 獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則; 在接收到在線調(diào)試命令的源碼后,按照所述轉(zhuǎn)換規(guī)則,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼; 將所述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,所述將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼,將所述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板包括: 將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;將得到的離線命令源碼和當(dāng)前的調(diào)試器客戶端,進(jìn)行二次編譯生成支持離線調(diào)試的調(diào)試器客戶端,將所述支持離線調(diào)試的調(diào)試器客戶端發(fā)送給目標(biāo)板;或者, 將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的代碼并鏈接為動態(tài)庫,將所述動態(tài)庫發(fā)送給目標(biāo)板。
3.根據(jù)權(quán)利要求2所述方法,其特征在于,所述將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼包括: 使用編譯器將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼;或者,通過客戶端工具將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼。
4.根據(jù)權(quán)利要求3所述方法,其特征在于,所述使用編譯器將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼包括: 讀入所述在線調(diào)試命令的源碼,根據(jù)所述轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配,若匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元,然后輸出離線調(diào)試命令的源碼。
5.根據(jù)權(quán)利要求1至4任意一項所述方法,其特征在于,所述轉(zhuǎn)換規(guī)則包括: 符號表信息轉(zhuǎn)換規(guī)則、寄存器及調(diào)用棧規(guī)則、調(diào)試輸出接口轉(zhuǎn)換規(guī)則、內(nèi)存分布規(guī)則中的至少一項; 所述符號表信息轉(zhuǎn)換規(guī)則為:在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則; 所述寄存器及調(diào)用棧規(guī)則為:通用寄存器個數(shù),函數(shù)返回地址,棧指針或者個人計算機(jī)PC指針的寄存器配置,以及函數(shù)調(diào)用棧信息; 所述調(diào)試輸出接口 轉(zhuǎn)換規(guī)則為:在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口的規(guī)則; 所述內(nèi)存分布規(guī)則為:確定私有內(nèi)存或者共享內(nèi)存的大小及分布的規(guī)則。
6.一種嵌入式系統(tǒng)的調(diào)試轉(zhuǎn)換裝置,其特征在于,包括: 規(guī)則獲取單元,用于獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則; 源碼接收單元,用于接收在線調(diào)試命令的源碼; 轉(zhuǎn)換單元,用于在所述源碼接收單元接收到在線調(diào)試命令的源碼后,按照所述規(guī)則獲取單元獲取到的轉(zhuǎn)換規(guī)則,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼; 發(fā)送單元,用于將所述轉(zhuǎn)換單元得到的支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。
7.根據(jù)權(quán)利要求6所述調(diào)試轉(zhuǎn)換裝置,其特征在于, 所述轉(zhuǎn)換單元,具體用于將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的源碼;將得到的離線命令源碼和當(dāng)前的調(diào)試器客戶端進(jìn)行二次編譯生成支持離線調(diào)試的調(diào)試器客戶端;或者,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線調(diào)試命令的代碼并鏈接為動態(tài)庫;所述發(fā)送單元,具體用于將所述轉(zhuǎn)換單元得到的支持離線調(diào)試的調(diào)試器客戶端發(fā)送給目標(biāo)板;或者將所述轉(zhuǎn)換單元得到的動態(tài)庫發(fā)送給目標(biāo)板。
8.根據(jù)權(quán)利要求6所述調(diào)試轉(zhuǎn)換裝置,其特征在于, 所述轉(zhuǎn)換單元,具體用于使用編譯器將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼;或者,通過客戶端工具將所述在線調(diào)試命令的源碼轉(zhuǎn)換成離線命令的源碼。
9.根據(jù)權(quán)利要求8所述調(diào)試轉(zhuǎn)換裝置,其特征在于,所述轉(zhuǎn)換單元包括: 讀取單元,用于讀入所述源碼接收單元接收的在線調(diào)試命令的源碼; 匹配單元,用于根據(jù)所述規(guī)則獲取單元獲取的轉(zhuǎn)換規(guī)則進(jìn)行字符串的規(guī)則匹配;源碼生成單元,用于若所述匹配單元匹配成功,則調(diào)用轉(zhuǎn)換處理接口生成編譯器能識別的詞法或者語法單元,然后輸出離線調(diào)試命令的源碼。
10.根據(jù)權(quán)利要求6至9任意一項所述裝置,其特征在于, 所述規(guī)則獲取單元,獲取的轉(zhuǎn)換規(guī)則包括:符號表信息轉(zhuǎn)換規(guī)則、寄存器及調(diào)用棧規(guī)貝U、調(diào)試輸出接口轉(zhuǎn)換規(guī)則、內(nèi)存分布規(guī)則中的至少一項; 所述符號表信息轉(zhuǎn)換規(guī)則為:在線調(diào)試命令業(yè)務(wù)相關(guān)符號或者全局符號的地址映射信息轉(zhuǎn)換到在線調(diào)試器能識別的符號信息的規(guī)則; 所述寄存器及調(diào)用棧規(guī)則為:通用寄存器個數(shù),函數(shù)返回地址,棧指針或者個人計算機(jī)PC指針的寄存器配置,以及函數(shù)調(diào)用棧信息; 所述 調(diào)試輸出接口轉(zhuǎn)換規(guī)則為:在線調(diào)試的命令接口轉(zhuǎn)換到離線調(diào)試命令接口的規(guī)則; 所述內(nèi)存分布規(guī)則為:確定私有內(nèi)存或者共享內(nèi)存的大小及分布的規(guī)則。
11.一種嵌入式系統(tǒng)的調(diào)試系統(tǒng),包括,調(diào)試器、目標(biāo)板,其特征在于,還包括:權(quán)利要求6至10任意一項的調(diào)試轉(zhuǎn)換裝置; 所述調(diào)試轉(zhuǎn)換裝置從所述調(diào)試器的客戶端接收在線調(diào)試命令的源碼,并將支持離線調(diào)試的代碼輸出給所述目標(biāo)板的服務(wù)端。
全文摘要
本發(fā)明實施例公開了一種嵌入式系統(tǒng)的調(diào)試方法、調(diào)試轉(zhuǎn)換裝置和系統(tǒng),其中方法的實現(xiàn)包括獲取定制的在線調(diào)試命令到離線調(diào)試命令的轉(zhuǎn)換規(guī)則;在接收到在線調(diào)試命令的源碼后,按照所述轉(zhuǎn)換規(guī)則,將所述在線調(diào)試命令的源碼轉(zhuǎn)換成支持離線調(diào)試的代碼;將所述支持離線調(diào)試的代碼發(fā)送給目標(biāo)板。通過將在線調(diào)試命令進(jìn)行從在線調(diào)試命令的源碼到離線調(diào)試的代碼的轉(zhuǎn)換,實現(xiàn)在線調(diào)試命令的離線調(diào)試,可以解決嵌入式系統(tǒng)軟件的在線調(diào)試和離線調(diào)試的重復(fù)開發(fā)問題,避免對不同的平臺實現(xiàn)離線調(diào)試,或?qū)ο嗤钠脚_實現(xiàn)不同版本的離線調(diào)試時都需要修改調(diào)試器客戶端的問題,因此,可以增加在線調(diào)試工具的使用范圍,縮短離線調(diào)試工具的開發(fā)時間,降低了開發(fā)成本。
文檔編號G06F11/36GK103218294SQ20131013092
公開日2013年7月24日 申請日期2013年4月16日 優(yōu)先權(quán)日2013年4月16日
發(fā)明者劉曉瑩, 鄭文欽, 崔世強(qiáng) 申請人:華為技術(shù)有限公司