專利名稱:一種操作系統(tǒng)內(nèi)核調(diào)試方法和虛擬調(diào)試服務(wù)模塊的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作系統(tǒng)領(lǐng)域,尤其涉及一種基于虛擬化的操作系統(tǒng)內(nèi)核調(diào)試方法和虛擬調(diào)試服務(wù)模塊。
背景技術(shù):
一直以來,內(nèi)核調(diào)試都是操作系統(tǒng)內(nèi)核開發(fā)的一個(gè)技術(shù)瓶頸?,F(xiàn)有的Linux系統(tǒng)內(nèi)核調(diào)試手段包括10 、1^^01^、?1壯1^1 08等,這些內(nèi)核調(diào)試手段中大多需要給1^11皿系統(tǒng)內(nèi)核植入特定的補(bǔ)丁 O^atch)才能進(jìn)行調(diào)試,而且而且這種調(diào)試方式相當(dāng)于在操作系統(tǒng)調(diào)試自身,因此只能支持很簡(jiǎn)單的調(diào)試功能,例如查看內(nèi)核數(shù)據(jù)結(jié)構(gòu)、打印現(xiàn)場(chǎng)信息等,無法實(shí)現(xiàn)單步調(diào)試和設(shè)置端點(diǎn)等高級(jí)調(diào)試功能。雖然GDB調(diào)試手段可以提供一些高級(jí)的調(diào)試的功能,但是必須由兩臺(tái)主機(jī)才能完成調(diào)試。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種操作系統(tǒng)內(nèi)核調(diào)試方法和虛擬調(diào)試服務(wù)模塊,以解決調(diào)試手段單一、調(diào)試所需的主機(jī)數(shù)量多的問題。本發(fā)明實(shí)施例一方面提供一種操作系統(tǒng)內(nèi)核的調(diào)試方法,虛擬機(jī)上運(yùn)行主控操作系統(tǒng)和被調(diào)試操作系統(tǒng),該方法包括虛擬調(diào)試服務(wù)模塊接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的插入至少一個(gè)斷點(diǎn)的斷點(diǎn)插入請(qǐng)求,所述斷點(diǎn)插入請(qǐng)求中包括插入斷點(diǎn)的位置信息;虛擬調(diào)試服務(wù)模塊根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中;虛擬調(diào)試服務(wù)模塊捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常,并將捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)的位置進(jìn)行比較,如果匹配,則暫停被調(diào)試操作系統(tǒng)的運(yùn)行。本發(fā)明另一方面還提供一種虛擬調(diào)試服務(wù)模塊,其構(gòu)建在虛擬機(jī)中,所述虛擬機(jī)上運(yùn)行主控操作系統(tǒng)和被調(diào)試操作系統(tǒng),該虛擬調(diào)試服務(wù)模塊包括斷點(diǎn)插入請(qǐng)求接收單元,用于接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的插入至少一個(gè)斷點(diǎn)的斷點(diǎn)插入請(qǐng)求,所述斷點(diǎn)插入請(qǐng)求中包括插入斷點(diǎn)的位置信息;斷點(diǎn)插入單元,用于根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中;斷點(diǎn)異常捕獲單元,用于捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常;特征比較單元,用于將所述捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)的位置進(jìn)行比較,如果匹配成功,則觸發(fā)暫停單元進(jìn)行工作;暫停單元,用于觸發(fā)被調(diào)試操作系統(tǒng)暫停運(yùn)行。本發(fā)明實(shí)施例中在虛擬機(jī)中實(shí)現(xiàn)一個(gè)虛擬調(diào)試模塊,借助該虛擬調(diào)試模塊可以實(shí)現(xiàn)對(duì)被調(diào)試操作系統(tǒng)的斷點(diǎn)調(diào)試,可選地還可以實(shí)現(xiàn)單步執(zhí)行調(diào)試,調(diào)試的手段更多。而且本發(fā)明實(shí)施例在進(jìn)行調(diào)試的過程中只需要一臺(tái)主機(jī)即可完成。
圖1是本發(fā)明實(shí)施例提供的操作系統(tǒng)內(nèi)核的調(diào)試方法的流程示意圖;圖2是本發(fā)明實(shí)施例一中的操作系統(tǒng)內(nèi)核的調(diào)試方法所基于的系統(tǒng)層次架構(gòu)圖;圖3是本發(fā)明實(shí)施例一提供的操作系統(tǒng)內(nèi)核的調(diào)試方法的流程示意圖;圖4是本發(fā)明實(shí)施例二提供的操作系統(tǒng)內(nèi)核的調(diào)試方法的流程示意圖;圖5是本發(fā)明實(shí)施例提供的虛擬調(diào)試服務(wù)模塊的結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明實(shí)施例在運(yùn)行在硬件實(shí)體和操作系統(tǒng)之間的虛擬機(jī)中實(shí)現(xiàn)了一個(gè)虛擬調(diào)試服務(wù)(vir_gdbkrver)模塊,虛擬機(jī)通過虛擬化可以實(shí)現(xiàn)硬件共享,在一套硬件上同時(shí)運(yùn)行多個(gè)操作系統(tǒng),在本發(fā)明實(shí)施例中主控操作系統(tǒng)和被調(diào)試操作系統(tǒng),主控操作系統(tǒng)與客戶進(jìn)行交互,是負(fù)責(zé)調(diào)試的操作系統(tǒng)。虛擬調(diào)試服務(wù)模塊可以與主控操作系統(tǒng)中的調(diào)試模塊(例如gdb)進(jìn)行通信,用于實(shí)現(xiàn)調(diào)試模塊的控制命令,主控操作系統(tǒng)中的調(diào)試模塊利用通用調(diào)試協(xié)議(例如gdb串行協(xié)議、或加密協(xié)議提供安全性)通過虛擬調(diào)試服務(wù)模塊進(jìn)行交互。基于上述架構(gòu),本發(fā)明的一個(gè)實(shí)施例提供一種操作系統(tǒng)內(nèi)核的調(diào)試方法,如圖1 所示,該方法包括步驟SlOl 虛擬調(diào)試服務(wù)模塊接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的斷點(diǎn)插入請(qǐng)求,該斷點(diǎn)插入請(qǐng)求中包括請(qǐng)求插入斷點(diǎn)的位置信息。當(dāng)用戶想要在被調(diào)試操作系統(tǒng)中插入斷點(diǎn)時(shí),可以通過主控操作系統(tǒng)向調(diào)試模塊發(fā)送斷點(diǎn)插入請(qǐng)求,該斷點(diǎn)插入請(qǐng)求中包含了用戶想要插入的各個(gè)斷點(diǎn)的位置信息。步驟S102 虛擬調(diào)試服務(wù)模塊根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中。而后可以運(yùn)行被調(diào)試操作系統(tǒng),當(dāng)被調(diào)試操作系統(tǒng)在運(yùn)行過程中會(huì)觸發(fā)斷點(diǎn)異常,該斷點(diǎn)異常可能是因?yàn)閳?zhí)行到步驟S102中插入的用于調(diào)試的斷點(diǎn)產(chǎn)生的,也可能是執(zhí)行到操作系統(tǒng)本身定義的其他中斷產(chǎn)生的。步驟S103 虛擬調(diào)試服務(wù)模塊捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常。步驟S104 虛擬調(diào)試服務(wù)模塊將捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)位置進(jìn)行比較,如果匹配則暫停被調(diào)試操作系統(tǒng)的運(yùn)行。之所以要將捕獲到的斷點(diǎn)異常與調(diào)試斷點(diǎn)信息表中的斷點(diǎn)位置進(jìn)行比較,是因?yàn)檎缜拔乃?,捕獲到的斷點(diǎn)異常可能是因?yàn)閳?zhí)行到步驟S102中插入的用于調(diào)試的斷點(diǎn)產(chǎn)生的,也可能是執(zhí)行到操作系統(tǒng)本身定義的其他中斷產(chǎn)生的,而本發(fā)明實(shí)施例只需要對(duì)因執(zhí)行到用于調(diào)試的斷點(diǎn)而發(fā)生的異常進(jìn)行后續(xù)處理,對(duì)于其他原因產(chǎn)生的斷點(diǎn)異常不做處理;所以,在捕獲到斷點(diǎn)異常后,還需將其特征與調(diào)試斷點(diǎn)信息表中的斷點(diǎn)位置進(jìn)行比較,如果匹配,說明該斷點(diǎn)異常是被調(diào)試操作系統(tǒng)執(zhí)行到之前插入的斷點(diǎn)后產(chǎn)生的。上述斷點(diǎn)異常的特征包括發(fā)生異常的地址。此外,為了增強(qiáng)比較的嚴(yán)謹(jǐn)性,斷點(diǎn)異常的特征中還可以包括異常向量。對(duì)于斷點(diǎn)異常是因?yàn)閳?zhí)行到步驟S102中插入的用于調(diào)試的斷點(diǎn)產(chǎn)生的情況,該異常向量應(yīng)該是相同的一個(gè)特定值,所以本發(fā)明中還可以同時(shí)驗(yàn)證該異常向量是否等于執(zhí)行到用戶調(diào)試的斷點(diǎn)時(shí)被調(diào)試操作系統(tǒng)應(yīng)該產(chǎn)生的中斷向量。此外,還可以包括步驟S105 在暫停被調(diào)試操作系統(tǒng)的運(yùn)行以后,虛擬調(diào)試服務(wù)模塊接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的查閱被調(diào)試操作系統(tǒng)的狀態(tài)信息的查閱請(qǐng)求;步驟S106 虛擬調(diào)試服務(wù)模塊根據(jù)步驟S105中的查閱請(qǐng)求,將被調(diào)試操作系統(tǒng)中的狀態(tài)信息反饋至主控操作系統(tǒng)中的調(diào)試模塊。上述狀態(tài)信息可以包括被調(diào)試操作系統(tǒng)的寄存器中的信息、堆棧中的信息和全局變量其中的一個(gè)或者任意組合。由此可見,上述方法在虛擬機(jī)中實(shí)現(xiàn)了一個(gè)虛擬調(diào)試服務(wù)模塊,可以輕松實(shí)現(xiàn)被調(diào)試操作系統(tǒng)的斷點(diǎn)調(diào)試。以下以兩個(gè)具體的實(shí)施例詳細(xì)說明上述方法的具體實(shí)現(xiàn)。實(shí)施例一圖2示出了本實(shí)施例所基于的層次架構(gòu)圖。如圖2所示,GOSl為主控操作系統(tǒng), G0S2為被調(diào)試操作系統(tǒng)。GOSl和G0S2共同運(yùn)行在同一個(gè)虛擬機(jī)上。在虛擬機(jī)中構(gòu)建了一個(gè)虛擬調(diào)試服務(wù)模塊(vir_gdbserver)。在GOSl中具有調(diào)試模塊(gdb),gdb與vir_ gdbserver進(jìn)行通信,在實(shí)際中,為了使得上層的調(diào)試功能不依賴于底層的虛擬機(jī)的實(shí)現(xiàn)方式,在虛擬機(jī)中還構(gòu)建一個(gè)虛擬設(shè)備(Virtual device),主控操作系統(tǒng)GOSl中的調(diào)試模塊 gdb通過該虛擬設(shè)備與虛擬機(jī)中的虛擬調(diào)試服務(wù)模塊vir_gdbserver進(jìn)行通信。如圖3所示,本實(shí)施例中提供的操作系統(tǒng)內(nèi)核的調(diào)試方法包括如下步驟步驟S301 =GOSl中的gdb通過虛擬設(shè)備虛擬機(jī)中的虛擬調(diào)試服務(wù)模塊vir_ gdbserver模塊發(fā)送斷點(diǎn)插入請(qǐng)求,請(qǐng)求向被調(diào)試操作系統(tǒng)G0S2中插入用于調(diào)試的斷點(diǎn)。步驟S302 :vir_gdbserver模塊接收到該斷點(diǎn)插入請(qǐng)求后,根據(jù)其中包含的插入斷點(diǎn)的位置信息,向G0S2中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中。插入斷點(diǎn)的具體實(shí)現(xiàn)方式可以是向要插入斷點(diǎn)的位置處寫入斷點(diǎn)指令I(lǐng)NT 3,即 OxCC。在實(shí)際中,該調(diào)試斷點(diǎn)信息表可以以鏈表的形式進(jìn)行存儲(chǔ)。步驟S303 運(yùn)行G0S2,運(yùn)行過程中,G0S2會(huì)觸發(fā)斷點(diǎn)異常。步驟S304 :vir_gdbserver模塊捕獲G0S2運(yùn)行過程中觸發(fā)的斷點(diǎn)異常,并將該斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中的斷點(diǎn)位置進(jìn)行比較,如果匹配成功,說明該斷點(diǎn)異常是G0S2執(zhí)行到之前插入的用于調(diào)試的斷點(diǎn)后觸發(fā)的,則暫停G0S2的運(yùn)行。如果不能匹配, 則不做任何處理,由vir_gdbserver模塊繼續(xù)捕獲后續(xù)的斷點(diǎn)異常。在暫停G0S2的運(yùn)行以后,Vir_gdbSerVer模塊可以根據(jù)GOSl發(fā)送的查閱請(qǐng)求,將 G0S2中的狀態(tài)信息反饋至GOSl中的gdb,這里的狀態(tài)信息可以是G0S2中的各個(gè)寄存器內(nèi)的信息、堆棧信息和全局變量中的任意一個(gè)或者任意組合。需要說明的是,應(yīng)用本實(shí)施例中的方法也可以實(shí)現(xiàn)單步執(zhí)行調(diào)試的目的,只需要通過GOSl向vir_gdbserver模塊發(fā)送請(qǐng)求在G0S2執(zhí)行的每一步后都插入斷點(diǎn)的請(qǐng)求即可,這時(shí),在G0S2運(yùn)行過程中,每執(zhí)行完一步就觸發(fā)一次斷點(diǎn)異常,然后暫停G0S2的運(yùn)行,供用戶進(jìn)行單步執(zhí)行的斷點(diǎn)調(diào)試。此外,在一個(gè)優(yōu)選的實(shí)施例中,虛擬調(diào)試服務(wù)模塊(Vir_gdbSerVer模塊)還接收主控操作系統(tǒng)請(qǐng)求構(gòu)造調(diào)試環(huán)境的請(qǐng)求,虛擬調(diào)試服務(wù)模塊根據(jù)該請(qǐng)求,構(gòu)造被調(diào)試操作系統(tǒng)的運(yùn)行環(huán)境。利用該手段,用戶可以模擬被調(diào)試操作系統(tǒng)在各種極端運(yùn)行環(huán)境下的調(diào)試過程。例如,當(dāng)用戶知道出現(xiàn)故障的條件,但是不知道為什么該條件會(huì)出現(xiàn),也就是說該條件的出現(xiàn)完全是隨機(jī)的不可控的,此時(shí)可以將滿足該條件的環(huán)境通過人為構(gòu)造,達(dá)到故障輸入的目的,為進(jìn)一步克服該故障提供調(diào)試的基礎(chǔ)。這里構(gòu)造調(diào)試環(huán)境可以是在被調(diào)試操作系統(tǒng)運(yùn)行之前進(jìn)行,也可以是在被調(diào)試操作系統(tǒng)運(yùn)行到斷點(diǎn)時(shí)被暫停運(yùn)行的時(shí)候進(jìn)行。另外,上述GOSl中的gdb與vir_gdbserver模塊之間的通信過程優(yōu)選采用密鑰來完成,以增強(qiáng)系統(tǒng)的安全性。由此可見,本實(shí)施例中在虛擬機(jī)中實(shí)現(xiàn)了一個(gè)虛擬調(diào)試服務(wù)模塊,可以輕松實(shí)現(xiàn)被調(diào)試操作系統(tǒng)的斷點(diǎn)調(diào)試,還可以通過斷點(diǎn)調(diào)試的方式實(shí)現(xiàn)單步執(zhí)行調(diào)試。實(shí)施例二本實(shí)施例仍然基于圖2中的層次架構(gòu)圖。本實(shí)施例中提供的操作系統(tǒng)內(nèi)核的調(diào)試方法用來完成單步執(zhí)行調(diào)試的目的。圖4示出了本實(shí)施例提供的操作系統(tǒng)內(nèi)核的調(diào)試方法的示意圖,如圖4所示,該方法包括如下步驟步驟S401 當(dāng)需要進(jìn)行單步執(zhí)行調(diào)試時(shí),判斷硬件是否支持單步執(zhí)行。如果步驟S401的判斷結(jié)果為是時(shí),則執(zhí)行步驟S402,否則執(zhí)行步驟S40X。步驟S402 =GOSl中的gdb向虛擬機(jī)中的vir_gdbserver模塊發(fā)送控制命令,要求將被調(diào)試操作系統(tǒng)G0S2置于單步執(zhí)行模式。步驟S403 當(dāng)G0S2運(yùn)行時(shí),vir_gdbserver模塊將運(yùn)行該G0S2的CPU (中央處理器)中的標(biāo)志寄存器EFLAGS中的用于控制單步執(zhí)行調(diào)試模式開關(guān)的標(biāo)志位設(shè)置為表示“開啟”的狀態(tài),以使G0S2在運(yùn)行每一步后都產(chǎn)生單步異常。這里的用于控制單步執(zhí)行調(diào)試模式開關(guān)的標(biāo)志位可以為標(biāo)志寄存器EFLAGS中的 TF標(biāo)志位,TF標(biāo)志位的值設(shè)為“1”時(shí)表示開啟CPU的單步執(zhí)行調(diào)試模式,TF標(biāo)志位的值設(shè)為“0”時(shí)表示關(guān)閉CPU的單步執(zhí)行調(diào)試模式。步驟S404 :G0S2在運(yùn)行時(shí),每執(zhí)行完一條指令,就會(huì)產(chǎn)生一個(gè)單步異常。步驟S405 :vir_gdbserver模塊捕獲到G0S2運(yùn)行過程中產(chǎn)生的單步異常,當(dāng)確認(rèn) G0S2運(yùn)行的當(dāng)前步(或者說當(dāng)前運(yùn)行的一條指令)執(zhí)行完畢后,暫停G0S2的運(yùn)行。在步驟S405中暫停G0S2的運(yùn)行以后,vir_gdbserver模塊可以根據(jù)GOSl發(fā)送的查閱請(qǐng)求,將G0S2中的狀態(tài)信息反饋至GOSl中的gdb,這里的狀態(tài)信息可以是G0S2中的各個(gè)寄存器內(nèi)的信息、堆棧信息和全局變量中的任意一個(gè)或者任意組合。如果步驟S401的判斷結(jié)果為否時(shí),表明硬件不支持單步執(zhí)行調(diào)試,則直接執(zhí)行步驟 S406。步驟S406 =GOSl中的調(diào)試模塊gdb向vir_gdbserver模塊發(fā)送在G0S2執(zhí)行每一步均插入斷點(diǎn)的斷點(diǎn)插入請(qǐng)求,并執(zhí)行后續(xù)步驟。步驟S407 :vir_gdbserver模塊接收到該斷點(diǎn)插入請(qǐng)求后,根據(jù)其中包含的插入斷點(diǎn)的位置信息,向G0S2中的每一步后面均插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中。插入斷點(diǎn)的具體實(shí)現(xiàn)方式可以是向要插入斷點(diǎn)的位置處寫入斷點(diǎn)指令I(lǐng)NT 3,即 OxCC。在實(shí)際中,上述調(diào)試斷點(diǎn)信息表可以以鏈表的形式進(jìn)行存儲(chǔ)。步驟S408 運(yùn)行G0S2,運(yùn)行過程中,每執(zhí)行完一步就觸發(fā)一次斷點(diǎn)異常。步驟S409 :vir_gdbserver模塊捕獲G0S2運(yùn)行過程中觸發(fā)的斷點(diǎn)異常,并將該斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中的斷點(diǎn)位置進(jìn)行比較,如果匹配,說明該斷點(diǎn)異常是 G0S2執(zhí)行到之前插入的用于調(diào)試的斷點(diǎn)后觸發(fā)的,則暫停G0S2的運(yùn)行。在步驟S409中暫停G0S2的運(yùn)行以后,vir_gdbserver模塊可以根據(jù)GOSl發(fā)送的查閱請(qǐng)求,將G0S2中的狀態(tài)信息反饋至GOSl中的gdb,這里的狀態(tài)信息可以是G0S2中的各個(gè)寄存器內(nèi)的信息、堆棧信息和全局變量中的任意一個(gè)或者任意組合。此外,在一個(gè)優(yōu)選的實(shí)施例中,虛擬調(diào)試服務(wù)模塊(Vir_gdbSerVer模塊)還接收主控操作系統(tǒng)請(qǐng)求構(gòu)造調(diào)試環(huán)境的請(qǐng)求,虛擬調(diào)試服務(wù)模塊根據(jù)該請(qǐng)求,構(gòu)造被調(diào)試操作系統(tǒng)的運(yùn)行環(huán)境。利用該手段,用戶可以模擬被調(diào)試操作系統(tǒng)在各種極端運(yùn)行環(huán)境下的調(diào)試過程。例如,當(dāng)用戶知道出現(xiàn)故障的條件,但是不知道為什么該條件會(huì)出現(xiàn),也就是說該條件的出現(xiàn)完全是隨機(jī)的不可控的,此時(shí)可以將滿足該條件的環(huán)境通過人為構(gòu)造,達(dá)到故障輸入的目的,為進(jìn)一步克服該故障提供調(diào)試的基礎(chǔ)。這里構(gòu)造調(diào)試環(huán)境可以是在被調(diào)試操作系統(tǒng)運(yùn)行之前進(jìn)行,也可以是在被調(diào)試操作系統(tǒng)運(yùn)行到斷點(diǎn)時(shí)被暫停運(yùn)行的時(shí)候進(jìn)行。另外,上述GOSl中的gdb與vir_gdbserver模塊之間的通信過程優(yōu)選采用密鑰來完成,以增強(qiáng)系統(tǒng)的安全性。由此可見,本實(shí)施例中在虛擬機(jī)中實(shí)現(xiàn)了一個(gè)虛擬調(diào)試服務(wù)模塊,可以輕松實(shí)現(xiàn)被調(diào)試操作系統(tǒng)的斷點(diǎn)調(diào)試以及單步執(zhí)行調(diào)試。本發(fā)明另一實(shí)施例還相應(yīng)提供一種虛擬調(diào)試服務(wù)模塊,該虛擬調(diào)試服務(wù)模塊構(gòu)建在虛擬機(jī)中,該虛擬機(jī)上運(yùn)行主控操作系統(tǒng)和被調(diào)試操作系統(tǒng),如圖5所示,該虛擬調(diào)試服務(wù)模塊50包括斷點(diǎn)插入請(qǐng)求接收單元501、斷點(diǎn)插入單元502、斷點(diǎn)異常捕獲單元503、特征比較單元504和暫停單元505。其中,斷點(diǎn)插入請(qǐng)求接收單元501用于接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的插入至少一個(gè)斷點(diǎn)的斷點(diǎn)插入請(qǐng)求,上述斷點(diǎn)插入請(qǐng)求中包括插入斷點(diǎn)的位置信息。斷點(diǎn)插入單元502用于根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中。斷點(diǎn)異常捕獲單元503 用于捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常。特征比較單元504用于將上述捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)的位置進(jìn)行比較,如果匹配成功,則觸發(fā)暫停單元505進(jìn)行工作。暫停單元505用于觸發(fā)被調(diào)試操作系統(tǒng)暫停運(yùn)行。為了進(jìn)行單步執(zhí)行調(diào)試,優(yōu)選地,虛擬調(diào)試服務(wù)模塊還可以包括單步執(zhí)行支持判斷單元506,用于在需要進(jìn)行單步執(zhí)行調(diào)試時(shí),預(yù)先判斷硬件是否支持單步執(zhí)行;逐步斷點(diǎn)插入單元507,用于在單步執(zhí)行支持判斷單元506判斷結(jié)果為否時(shí),通知主控操作系統(tǒng)中的調(diào)試模塊向虛擬調(diào)試服務(wù)模塊發(fā)送在被調(diào)試操作系統(tǒng)執(zhí)行的每一步均插入斷點(diǎn)的斷點(diǎn)插入請(qǐng)求。此外,上述虛擬調(diào)試服務(wù)模塊還可以包括標(biāo)志位設(shè)置單元508,用于在單步執(zhí)行支持判斷單元判斷結(jié)果為是時(shí),在被調(diào)試操作系統(tǒng)運(yùn)行時(shí),將運(yùn)行該被調(diào)試操作系統(tǒng)的中央處理器的標(biāo)志寄存器中用于控制單步執(zhí)行調(diào)試模式開關(guān)的標(biāo)志位設(shè)置為表示“開啟”的狀態(tài),以使被調(diào)試操作系統(tǒng)在運(yùn)行每一步后都產(chǎn)生單步異常。單步異常捕獲單元509,用于捕獲被調(diào)試操作系統(tǒng)在運(yùn)行每一步后所產(chǎn)生的單步異常,當(dāng)虛擬調(diào)試服務(wù)模塊確認(rèn)被調(diào)試操作系統(tǒng)運(yùn)行的當(dāng)前步執(zhí)行完畢后,觸發(fā)上述暫停單元505進(jìn)行工作。此外,為了方便用戶在暫停運(yùn)行被調(diào)試操作系統(tǒng)的運(yùn)行狀態(tài)信息,優(yōu)選地還包括查閱單元506,用于用于在暫停被調(diào)試操作系統(tǒng)的運(yùn)行以后,接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的查閱被調(diào)試操作系統(tǒng)的狀態(tài)信息的查閱請(qǐng)求,并根據(jù)該查閱請(qǐng)求,將被調(diào)試操作系統(tǒng)的狀態(tài)信息反饋至主控操作系統(tǒng)中的調(diào)試模塊,這里被調(diào)試操作系統(tǒng)的狀態(tài)信息可以包括被調(diào)試操作系統(tǒng)的寄存器中的信息、堆棧中的信息和全局變量中的任何一個(gè)或者任意組合。以上公開的僅為本發(fā)明的幾個(gè)具體實(shí)施例,但本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化,都應(yīng)落在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種操作系統(tǒng)內(nèi)核的調(diào)試方法,其特征在于,虛擬機(jī)上運(yùn)行主控操作系統(tǒng)和被調(diào)試操作系統(tǒng),該方法包括虛擬調(diào)試服務(wù)模塊接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的斷點(diǎn)插入請(qǐng)求,所述斷點(diǎn)插入請(qǐng)求中包括插入斷點(diǎn)的位置信息;所述虛擬調(diào)試服務(wù)模塊根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中;所述虛擬調(diào)試服務(wù)模塊捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常,并將捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)的位置進(jìn)行匹配比較,如果匹配,則暫停被調(diào)試操作系統(tǒng)的運(yùn)行。
2.根據(jù)權(quán)利要求1所述的操作系統(tǒng)內(nèi)核的調(diào)試方法,其特征在于,還包括,當(dāng)需要進(jìn)行單步執(zhí)行調(diào)試時(shí),預(yù)先判斷硬件是否支持單步執(zhí)行,如果不支持,則主控操作系統(tǒng)中的調(diào)試模塊向虛擬調(diào)試服務(wù)模塊發(fā)送在被調(diào)試操作系統(tǒng)執(zhí)行的每一步均插入斷點(diǎn)的斷點(diǎn)插入請(qǐng)求。
3.根據(jù)權(quán)利要求2所述的操作系統(tǒng)內(nèi)核的調(diào)試方法,其特征在于,還包括,如果硬件支持單步執(zhí)行,則在被調(diào)試操作系統(tǒng)運(yùn)行時(shí),所述虛擬調(diào)試服務(wù)模塊將運(yùn)行該被調(diào)試操作系統(tǒng)的中央處理器中的標(biāo)志寄存器中用于控制單步執(zhí)行調(diào)試模式開關(guān)的標(biāo)志位設(shè)置為表示“開啟”的狀態(tài),以使被調(diào)試操作系統(tǒng)在運(yùn)行每一步后都產(chǎn)生單步異常;所述虛擬調(diào)試服務(wù)模塊捕獲被調(diào)試操作系統(tǒng)在運(yùn)行每一步后所產(chǎn)生的單步異常; 所述虛擬調(diào)試服務(wù)模塊確認(rèn)被調(diào)試操作系統(tǒng)運(yùn)行的當(dāng)前步執(zhí)行完畢后,則暫停被調(diào)試操作系統(tǒng)的運(yùn)行。
4.根據(jù)權(quán)利要求3所述的操作系統(tǒng)內(nèi)核的調(diào)試方法,其特征在于,所述用于控制單步執(zhí)行調(diào)試模式開關(guān)的標(biāo)志位為TF標(biāo)志位。
5.根據(jù)權(quán)利要求1至4中,限定比較匹配過程的特征信息,包括異常地址和異常向量。
6.根據(jù)權(quán)利要求1至4中任意一項(xiàng)所述的操作系統(tǒng)內(nèi)核的調(diào)試方法,其特征在于,還包括在暫停被調(diào)試操作系統(tǒng)的運(yùn)行以后,虛擬調(diào)試服務(wù)模塊接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的查閱被調(diào)試操作系統(tǒng)的狀態(tài)信息的查閱請(qǐng)求,并根據(jù)查閱請(qǐng)求,將被調(diào)試操作系統(tǒng)的狀態(tài)信息反饋至主控操作系統(tǒng)中的調(diào)試模塊;所述被調(diào)試操作系統(tǒng)的狀態(tài)信息包括被調(diào)試操作系統(tǒng)的寄存器中的信息、堆棧中的信息和全局變量中的任意一個(gè)或者任意組合。
7.—種虛擬調(diào)試服務(wù)模塊,其特征在于,其構(gòu)建在虛擬機(jī)中,所述虛擬機(jī)上運(yùn)行主控操作系統(tǒng)和被調(diào)試操作系統(tǒng),該虛擬調(diào)試服務(wù)模塊包括斷點(diǎn)插入請(qǐng)求接收單元,用于接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的斷點(diǎn)插入請(qǐng)求, 所述斷點(diǎn)插入請(qǐng)求中包括插入斷點(diǎn)的位置信息;斷點(diǎn)插入單元,用于根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中; 斷點(diǎn)異常捕獲單元,用于捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常; 特征比較單元,用于將所述捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)的位置進(jìn)行比較,如果匹配成功,則觸發(fā)暫停單元進(jìn)行工作;暫停單元,用于觸發(fā)被調(diào)試操作系統(tǒng)暫停運(yùn)行。
8.根據(jù)權(quán)利要求7所述的虛擬調(diào)試服務(wù)模塊,其特征在于,還包括單步執(zhí)行支持判斷單元,用于在需要進(jìn)行單步執(zhí)行調(diào)試時(shí),預(yù)先判斷硬件是否支持單步執(zhí)行;逐步斷點(diǎn)插入單元,用于在單步執(zhí)行支持判斷單元判斷結(jié)果為否時(shí),通知主控操作系統(tǒng)中的調(diào)試模塊向虛擬調(diào)試服務(wù)模塊發(fā)送在被調(diào)試操作系統(tǒng)執(zhí)行的每一步均插入斷點(diǎn)的斷點(diǎn)插入請(qǐng)求。
9.根據(jù)權(quán)利要求8所述的虛擬調(diào)試服務(wù)模塊,其特征在于,還包括標(biāo)志位設(shè)置單元,用于在單步執(zhí)行支持判斷單元判斷結(jié)果為是時(shí),在被調(diào)試操作系統(tǒng)運(yùn)行時(shí),將運(yùn)行該被調(diào)試操作系統(tǒng)的中央處理器的標(biāo)志寄存器中用于控制單步執(zhí)行調(diào)試模式開關(guān)的標(biāo)志位設(shè)置為表示“開啟”的狀態(tài),以使被調(diào)試操作系統(tǒng)在運(yùn)行每一步后都產(chǎn)生單步異常。單步異常捕獲單元,用于捕獲被調(diào)試操作系統(tǒng)在運(yùn)行每一步后所產(chǎn)生的單步異常,當(dāng)虛擬調(diào)試服務(wù)模塊確認(rèn)被調(diào)試操作系統(tǒng)運(yùn)行的當(dāng)前步執(zhí)行完畢后,觸發(fā)所述暫停單元進(jìn)行工作。
10.根據(jù)權(quán)利要求7至9中任意一項(xiàng)所述的虛擬調(diào)試服務(wù)模塊,其特征在于,還包括 查閱單元,用于在暫停被調(diào)試操作系統(tǒng)的運(yùn)行以后,接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的查閱被調(diào)試操作系統(tǒng)的狀態(tài)信息的查閱請(qǐng)求,并根據(jù)該查閱請(qǐng)求,將被調(diào)試操作系統(tǒng)的狀態(tài)信息反饋至主控操作系統(tǒng)中的調(diào)試模塊;所述被調(diào)試操作系統(tǒng)的狀態(tài)信息包括被調(diào)試操作系統(tǒng)的寄存器中的信息、堆棧中的信息和全局變量中的任意一個(gè)或者任意組合。
全文摘要
一種操作系統(tǒng)內(nèi)核的調(diào)試方法和虛擬調(diào)試服務(wù)模塊,該方法包括虛擬調(diào)試服務(wù)模塊接收主控操作系統(tǒng)中的調(diào)試模塊發(fā)送的插入至少一個(gè)斷點(diǎn)的斷點(diǎn)插入請(qǐng)求,斷點(diǎn)插入請(qǐng)求中包括插入斷點(diǎn)的位置信息;虛擬調(diào)試服務(wù)模塊根據(jù)斷點(diǎn)插入請(qǐng)求中的插入斷點(diǎn)的位置信息,在被調(diào)試操作系統(tǒng)中的相應(yīng)位置處插入斷點(diǎn),并將插入斷點(diǎn)的位置記錄在調(diào)試斷點(diǎn)信息表中;虛擬調(diào)試服務(wù)模塊捕獲被調(diào)試操作系統(tǒng)執(zhí)行過程中觸發(fā)的斷點(diǎn)異常,并將捕獲到的斷點(diǎn)異常的特征與調(diào)試斷點(diǎn)信息表中記錄的斷點(diǎn)的位置進(jìn)行比較,如果匹配,則暫停被調(diào)試操作系統(tǒng)的運(yùn)行。
文檔編號(hào)G06F11/36GK102301344SQ201180001650
公開日2011年12月28日 申請(qǐng)日期2011年7月6日 優(yōu)先權(quán)日2011年7月6日
發(fā)明者張超, 李俊 申請(qǐng)人:華為技術(shù)有限公司