專利名稱::一種軟件調(diào)試的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及嵌入式軟件的調(diào)試技術(shù),尤其涉及一種軟件調(diào)試的方法和系統(tǒng)。
背景技術(shù):
:調(diào)試器作為一種重要的軟件調(diào)試手段,在軟件開發(fā)中發(fā)揮著十分重要的作用,例如,在對軟件缺陷進(jìn)行跟蹤調(diào)試時,調(diào)試器提供了非常多的功能,其中包括運(yùn)行、暫停、步進(jìn)一個進(jìn)程;設(shè)置斷點(diǎn);操作寄存器和內(nèi)存;捕捉內(nèi)部異常等。調(diào)試器主要包括硬件調(diào)試器和軟件調(diào)試器,硬件調(diào)試器的功能強(qiáng)大,但是價格昂貴,使用成本和學(xué)習(xí)成本都很高;軟件調(diào)試器通常是對于運(yùn)行在操作系統(tǒng)層之上的代碼進(jìn)行調(diào)試,這種調(diào)試不具備可移植性,尤其是對linuX、uC0S、eC0S等軟件系統(tǒng)的底層驅(qū)動代碼的調(diào)試支持有限。相關(guān)技術(shù)中軟件調(diào)試的工作原理,通常是運(yùn)行一段代碼,通過顯示器來查看其輸出,根據(jù)其輸出結(jié)果判斷是否運(yùn)行正確。然而,對于系統(tǒng)的底層驅(qū)動代碼調(diào)試、系統(tǒng)初始化階段的代碼調(diào)試等情況,此時由于顯示器的驅(qū)動程序還未加載,顯示器還沒有輸出,也還沒有串口、網(wǎng)口等交互手段,因此,傳統(tǒng)的軟件調(diào)試方法并不適用于以上情況的代碼調(diào)試。針對系統(tǒng)的底層驅(qū)動代碼、系統(tǒng)初始化階段的代碼等調(diào)試需求,相關(guān)技術(shù)采用一種點(diǎn)燈方式來調(diào)試跟蹤代碼。但是,這種點(diǎn)燈調(diào)試方式不能查看程序的調(diào)用棧,即使點(diǎn)燈也需要一些對處理器基本的配置工作,可視性差,操作復(fù)雜。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種軟件調(diào)試的方法和系統(tǒng),以軟件調(diào)試的方法和系統(tǒng),以解決點(diǎn)燈調(diào)試方式的可視性差、操作復(fù)雜等問題。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種軟件調(diào)試的方法,該方法包括使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件;解析所述描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。所述關(guān)鍵性調(diào)試信息包括選取的斷點(diǎn)方式、產(chǎn)生斷點(diǎn)的物理內(nèi)存地址、斷點(diǎn)到達(dá)時需要查看的寄存器、記錄異常信息的內(nèi)存地址。所述按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件,包括將所述關(guān)鍵性調(diào)試信息按照預(yù)定義的格式存儲為后綴是.cfg的描述文件。所述依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件,包括按照Cfg文件的格式修改調(diào)試代碼所生成的可執(zhí)行連接文件格式ELF文件,根據(jù)處理器指令集,將調(diào)試代碼插入修改后的ELF文件中,并重新鏈接修改后的ELF文件。所述依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果,包括當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,解析堆棧寄存器生成文本根式函數(shù)調(diào)用,并記錄函數(shù)調(diào)用棧的信息、以及要查看的寄存器的內(nèi)容到記錄異常信息的內(nèi)存地址。一種軟件調(diào)試的系統(tǒng),該系統(tǒng)包括用戶擴(kuò)展接口模塊,用于使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;擴(kuò)展調(diào)試程序處理引擎,用于按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件;調(diào)試處理例程庫,用于解析所述擴(kuò)展調(diào)試程序處理引擎中存儲的描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;操作系統(tǒng)處理模塊,用于依據(jù)擴(kuò)展調(diào)試程序處理引擎中修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。所述關(guān)鍵性調(diào)試信息包括選取的斷點(diǎn)方式、產(chǎn)生斷點(diǎn)的物理內(nèi)存地址、斷點(diǎn)到達(dá)時需要查看的寄存器、記錄異常信息的內(nèi)存地址。所述擴(kuò)展調(diào)試程序處理引擎,還用于將所述關(guān)鍵性調(diào)試信息按照預(yù)定義的格式存儲為后綴是.cfg的描述文件。所述調(diào)試處理例程庫,還用于按照Cfg文件的格式修改調(diào)試代碼所生成的可執(zhí)行連接文件格式ELF文件,根據(jù)處理器指令集,將調(diào)試代碼插入修改后的ELF文件中,并重新鏈接修改后的ELF文件。所述操作系統(tǒng)處理模塊,還用于當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,解析堆棧寄存器生成文本根式函數(shù)調(diào)用,并記錄函數(shù)調(diào)用棧的信息、以及要查看的寄存器的內(nèi)容到記錄異常信息的內(nèi)存地址。本發(fā)明所提供的一種軟件調(diào)試的方法和系統(tǒng),使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件;解析所述描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。這種通過直接修改可執(zhí)行文件的方式進(jìn)行代碼調(diào)試,能夠減少移植系統(tǒng)的工作量,特別適用于多核處理器、系統(tǒng)初始化之后才有串口的系統(tǒng)。本發(fā)明的調(diào)試方式具有輕量級、可擴(kuò)展、可操作性強(qiáng)、平臺無關(guān)等特點(diǎn)。圖1為本發(fā)明實(shí)施例的一種軟件調(diào)試的方法流程圖;圖2為本發(fā)明實(shí)施例中的一種寄存器的示意圖;圖3為本發(fā)明實(shí)施例的一種軟件調(diào)試的系統(tǒng)組成結(jié)構(gòu)示意圖。具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明的技術(shù)方案進(jìn)一步詳細(xì)闡述。本發(fā)明實(shí)施例提供的一種軟件調(diào)試的方法,如圖1所示,主要包括步驟101,使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息。關(guān)鍵性調(diào)試信息包括選取的斷點(diǎn)方式、產(chǎn)生斷點(diǎn)的物理內(nèi)存地址、斷點(diǎn)到達(dá)時需要查看的寄存器和記錄異常信息的內(nèi)存地址等。調(diào)試器的主要功能包括斷點(diǎn)調(diào)試、堆棧分析等。對于斷點(diǎn)調(diào)試,主流的調(diào)試工具提供的斷點(diǎn)調(diào)試手段主要是軟件斷點(diǎn)與硬件斷點(diǎn)。軟件斷點(diǎn)就是在CPU執(zhí)行到特定位置的代碼時使其暫停。軟件斷點(diǎn)是調(diào)試過程中用的最多的斷點(diǎn)。軟件斷點(diǎn)的本質(zhì)就是一個單字節(jié)的指令,用于暫停被執(zhí)行程序,并將控制權(quán)轉(zhuǎn)移給調(diào)試器的斷點(diǎn)處理函數(shù)。以PowerPC處理器為例,PowerPC處理器是一種精簡指令集計算機(jī)(RISC,ReducedInstructionSetComputer)架構(gòu)的中央處理器(CPU)。如圖2所不為PowerPC處理器中硬件斷點(diǎn)寄存器的示意圖。有以下指令mtcrr5,該指令不被CPU理解,需要被轉(zhuǎn)換成一種操作碼,該指令轉(zhuǎn)換成操作碼即為8BC3,如果該指令發(fā)生在0x4433221這個地址,則顯示為0x443322118BC3mtcrr5為了在這個地址設(shè)置斷點(diǎn),暫停CPU,需要將2字節(jié)的8BC3操作碼轉(zhuǎn)換成一個單字節(jié)的操作碼,轉(zhuǎn)換后的操作碼即為OxCC,顯示為0x44332211CCC3mtcrr5硬件斷點(diǎn)的功能十分強(qiáng)大,PowerPC處理器自帶硬件斷點(diǎn)寄存器,以實(shí)現(xiàn)以下基本的中斷功能A、當(dāng)特定的地址上有指令執(zhí)行時中斷;B、當(dāng)特定的地址上有數(shù)據(jù)可以寫入時中斷;C、當(dāng)特定的地址上有數(shù)據(jù)讀或?qū)?,但不?zhí)行時中斷。步驟102,按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件。將所述關(guān)鍵性調(diào)試信息按照預(yù)定義的格式存儲為后綴是.Cfg的描述文件。步驟103,解析所述描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件。調(diào)試處理例程庫解析該描述文件,并按照Cfg文件的格式來修改調(diào)試代碼所生成的可執(zhí)行連接文件格式(ELF,ExecutableandLinkableFormat)文件。ELF文件是linux系統(tǒng)下的可執(zhí)行文件。隨后,根據(jù)處理器指令集,將代碼插入修改后的ELF文件中,并重新鏈接修改后的ELF文件。上述對調(diào)試代碼所生成的ELF文件進(jìn)行修改的內(nèi)容有選擇堆棧調(diào)用解析格式、要記錄的寄存器名稱、數(shù)據(jù)段內(nèi)容.data,bss等,這些信息被記錄到系統(tǒng)的保留內(nèi)存地址。步驟104,依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。運(yùn)行調(diào)試代碼,當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,強(qiáng)制跳轉(zhuǎn)到插入代碼處,根據(jù)PowerPC處理器的二進(jìn)制進(jìn)口協(xié)議,記錄斷點(diǎn)出現(xiàn)時要求記錄的信息,并自動解析堆棧寄存器生成文本根式函數(shù)調(diào)用,記錄函數(shù)調(diào)用棧的信息、以及要查看的寄存器的內(nèi)容到記錄異常信息的內(nèi)存地址。下面以ucos代碼和PowerPC處理器為例,對本發(fā)明實(shí)施例的軟件調(diào)試方法進(jìn)一步詳細(xì)闡述。1、首先在配置文件中選擇斷點(diǎn)類型,選擇函數(shù)調(diào)用棧的深度,選擇當(dāng)斷點(diǎn)到達(dá)時要查看的寄存器,定義記錄異常信息的內(nèi)存地址。如果選擇軟件斷點(diǎn),則通過解析要運(yùn)行ELF文件的符號表,列出要定位的函數(shù),實(shí)例如下c0000000〈—start〉cOOOOOOO60000000nopc00000047c7fIb78mrr31,r3c00000087c9e2378mrr30,r4cOOOOOOc7cbd2b78mrr29,r5cOOOOOlO7cdc3378mrr28,r6c00000147cfb3b78mrr27,r7c00000183b200000Iir25,0cOOOOOlc3b000000Iir24,0c00000203aeO0000Iir23,0c000002448000005blc0000028<invstr>c0000028<invstr>c00000287cc802a6mfIrr6c000002c7ceO00a6mfmsrr7c000003054e4dfferlwinmr4,r7,27,31,31如果需要在start函數(shù)的“c0000014:7cfb3b78mrr27,r7”處增加斷點(diǎn),則通過配置文件記錄該軟件中斷的地址。2、解析該配置文件,調(diào)試處理例程庫對ucos代碼生成的ELF文件進(jìn)行修改,并重新鏈接修改后的ELF文件。3、在處理器上運(yùn)行ucos代碼,當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,函數(shù)調(diào)用棧的信息,要查看的寄存器內(nèi)容會被自動記錄到用戶定義的內(nèi)存地址上。4、設(shè)備自動不斷電重啟,重啟后,通過查看自定義的異常信息保存地址信息,查看得到斷點(diǎn)出現(xiàn)時的信息。本發(fā)明實(shí)施例通過直接修改可執(zhí)行文件的方式進(jìn)行代碼調(diào)試,通過界面化,能夠減少移植系統(tǒng)的工作量,特別適用于多核處理器、系統(tǒng)初始化之后才有串口的系統(tǒng)。本發(fā)明的調(diào)試方式具有輕量級、可擴(kuò)展、可操作性強(qiáng)、平臺無關(guān)等特點(diǎn)。如圖3所示,本發(fā)明還提供了一種軟件調(diào)試的系統(tǒng),包括用戶擴(kuò)展接口模塊,用于使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;擴(kuò)展調(diào)試程序處理引擎,用于按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲關(guān)鍵性調(diào)試信息為描述文件;調(diào)試處理例程庫,用于解析擴(kuò)展調(diào)試程序處理引擎中存儲的描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;操作系統(tǒng)處理模塊,用于依據(jù)擴(kuò)展調(diào)試程序處理引擎中修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。優(yōu)選地,關(guān)鍵性調(diào)試信息包括選取的斷點(diǎn)方式、產(chǎn)生斷點(diǎn)的物理內(nèi)存地址、斷點(diǎn)到達(dá)時需要查看的寄存器、記錄異常信息的內(nèi)存地址。擴(kuò)展調(diào)試程序處理引擎,還用于將關(guān)鍵性調(diào)試信息按照預(yù)定義的格式存儲為后綴是.cfg的描述文件。調(diào)試處理例程庫,還用于按照cfg文件的格式修改調(diào)試代碼所生成的可執(zhí)行連接文件格式ELF文件,根據(jù)處理器指令集,將調(diào)試代碼插入修改后的ELF文件中,并重新鏈接修改后的ELF文件。操作系統(tǒng)處理模塊,還用于當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,解析堆棧寄存器生成文本根式函數(shù)調(diào)用,并記錄函數(shù)調(diào)用棧的信息、以及要查看的寄存器的內(nèi)容到記錄異常信息的內(nèi)存地址。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。權(quán)利要求1.一種軟件調(diào)試的方法,其特征在于,該方法包括:使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件;解析所述描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。2.根據(jù)權(quán)利要求1所述軟件調(diào)試的方法,其特征在于,所述關(guān)鍵性調(diào)試信息包括:選取的斷點(diǎn)方式、產(chǎn)生斷點(diǎn)的物理內(nèi)存地址、斷點(diǎn)到達(dá)時需要查看的寄存器、記錄異常信息的內(nèi)存地址。3.根據(jù)權(quán)利要求2所述軟件調(diào)試的方法,其特征在于,所述按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件,包括:將所述關(guān)鍵性調(diào)試信息按照預(yù)定義的格式存儲為后綴是.cfg的描述文件。4.根據(jù)權(quán)利要求3所述軟件調(diào)試的方法,其特征在于,所述依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件,包括:按照cfg文件的格式修改調(diào)試代碼所生成的可執(zhí)行連接文件格式ELF文件,根據(jù)處理器指令集,將調(diào)試代碼插入修改后的ELF文件中,并重新鏈接修改后的ELF文件。5.根據(jù)權(quán)利要求4所述軟件調(diào)試的方法,其特征在于,所述依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果,包括:當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,解析堆棧寄存器生成文本根式函數(shù)調(diào)用,并記錄函數(shù)調(diào)用棧的信息、以及要查看的寄存器的內(nèi)容到記錄異常信息的內(nèi)存地址。6.一種軟件調(diào)試的系統(tǒng),其特征在于,該系統(tǒng)包括:用戶擴(kuò)展接口模塊,用于使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;擴(kuò)展調(diào)試程序處理引擎,用于按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件;調(diào)試處理例程庫,用于解析所述擴(kuò)展調(diào)試程序處理引擎中存儲的描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;操作系統(tǒng)處理模塊,用于依據(jù)擴(kuò)展調(diào)試程序處理引擎中修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。7.根據(jù)權(quán)利要求6所述軟件調(diào)試的系統(tǒng),其特征在于,所述關(guān)鍵性調(diào)試信息包括:選取的斷點(diǎn)方式、產(chǎn)生斷點(diǎn)的物理內(nèi)存地址、斷點(diǎn)到達(dá)時需要查看的寄存器、記錄異常信息的內(nèi)存地址。8.根據(jù)權(quán)利要求7所述軟件調(diào)試的系統(tǒng),其特征在于,所述擴(kuò)展調(diào)試程序處理引擎,還用于將所述關(guān)鍵性調(diào)試信息按照預(yù)定義的格式存儲為后綴是.cfg的描述文件。9.根據(jù)權(quán)利要求8所述軟件調(diào)試的系統(tǒng),其特征在于,所述調(diào)試處理例程庫,還用于按照cfg文件的格式修改調(diào)試代碼所生成的可執(zhí)行連接文件格式ELF文件,根據(jù)處理器指令集,將調(diào)試代碼插入修改后的ELF文件中,并重新鏈接修改后的ELF文件。10.根據(jù)權(quán)利要求9所述軟件調(diào)試的系統(tǒng),其特征在于,所述操作系統(tǒng)處理模塊,還用于當(dāng)運(yùn)行到斷點(diǎn)產(chǎn)生處時,解析堆棧寄存器生成文本根式函數(shù)調(diào)用,并記錄函數(shù)調(diào)用棧的信息、以及要查看的寄存器的內(nèi)容到記錄異常信息的內(nèi)存地址。全文摘要本發(fā)明公開了一種軟件調(diào)試的方法和系統(tǒng),方法包括使用嵌入式系統(tǒng)描述性語言設(shè)置關(guān)鍵性調(diào)試信息;按照嵌入式系統(tǒng)軟件調(diào)試信息的格式存儲所述關(guān)鍵性調(diào)試信息為描述文件;解析所述描述文件,并依據(jù)解析的描述文件修改調(diào)試代碼所生成的可執(zhí)行文件;依據(jù)修改后的可執(zhí)行文件運(yùn)行調(diào)試代碼,并記錄調(diào)試結(jié)果。通過本發(fā)明的方法和系統(tǒng),在調(diào)試時能夠減少移植系統(tǒng)的工作量,且具有輕量級、可擴(kuò)展、可操作性強(qiáng)、平臺無關(guān)等特點(diǎn)。文檔編號G06F11/36GK103077112SQ20121039385公開日2013年5月1日申請日期2012年10月16日優(yōu)先權(quán)日2012年10月16日發(fā)明者胡亞弟申請人:中興通訊股份有限公司