專利名稱:一種斷點調(diào)試方法和調(diào)試器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機軟件設(shè)計,尤其涉及一種斷點調(diào)試方法和調(diào)試器。
背景技術(shù):
調(diào)試器是處理器體系結(jié)構(gòu)設(shè)計與軟硬件協(xié)同驗證中不可或缺的一部分。一方面, 它在軟件層次上對目標(biāo)處理器的體系結(jié)構(gòu)進行建模來模擬其執(zhí)行行為,另一方面,通過提供調(diào)試接口,接收用戶輸入的各種控制信息,實現(xiàn)對程序執(zhí)行過程中的數(shù)據(jù)流、控制流的監(jiān)測及修改。調(diào)試器最基礎(chǔ)、最核心的功能之一是斷點功能,它可以讓程序中斷在需要的地方, 從而方便其分析。斷點可以分為行斷點和條件斷點兩種,其中行斷點是一種特殊的條件斷點,而條件斷點通常是以邏輯表達式的形式呈現(xiàn)?,F(xiàn)有技術(shù)的調(diào)試器一般采用表達式計算來實現(xiàn)條件斷點的解析,而表達式計算一般采用如下兩種方案進行處理第一種方案其于棧結(jié)構(gòu)的表達式計算,以后綴表達式a+b*c > (d*e+f)*g為例, 首先將后綴表達式利用棧操作生成中綴表達式abc*+de*f+g* >,按a,b,c*,+,d,e, *,f, +,g,*,>的順序依次壓棧,在壓棧過程中,遇到有效操作符的時候,按照操作符所需要操作數(shù)的個數(shù),從棧中彈出相應(yīng)個數(shù),計算后將結(jié)果再次壓入棧中。例如,當(dāng)壓入操作符*的時候,需要將操作數(shù)c和b依次彈出棧,并計算b*c后將結(jié)果再壓入到棧中。具體過程如圖1 所示。第二種方案基于語義二叉樹結(jié)構(gòu)的表達式計算,按字符的優(yōu)先級組織成二叉樹結(jié)構(gòu),計算時應(yīng)用深度優(yōu)先搜索算法從二叉樹的底層從左至右,從下至上依次進行計算。以第一種方案中的后綴表達式為例,處理的二叉樹結(jié)構(gòu)如圖2所示?,F(xiàn)有技術(shù)上述兩種方案存在的缺點是只能處理有限的固定模式,應(yīng)用面窄,當(dāng)通過調(diào)試接口輸入大量斷點信息時,繁瑣的表達式計算會嚴(yán)重影響調(diào)試器的執(zhí)行效率,嚴(yán)重影響調(diào)試器性能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種處理模式靈活的斷點調(diào)試方法和調(diào)試器,來解決條件斷點中繁瑣的表達式計算問題,從而大大提高了調(diào)試器的執(zhí)行效率。為實現(xiàn)上述目的,本發(fā)明提供了一種斷點調(diào)試方法,其特征在于包括以下步驟接收調(diào)試中的條件斷點;解析所述條件斷點,獲得斷點信息;將所述斷點信息中條件斷點生成決策圖;選擇將所述決策圖分析生成有序二叉決策圖或展開為語義二叉樹; 將所述有序二叉決策圖展開為語義二叉樹,并將節(jié)點信息映射到相應(yīng)的優(yōu)化代碼片段;將所述代碼片段注入到進程空間,進行斷點信息判斷。本發(fā)明還提供了一種調(diào)試器,其特征在于包括接收單元,用于接收調(diào)試中的條件斷點;解析單元,用于解析條件斷點,獲得斷點信息;生成單元,用于將斷點信息組織生成決策圖;展開單元,用于將決策圖展開為語義二叉樹,或者用于分析所述決策圖并生成有序二叉決策圖,將有序二叉決策圖展開成語義二叉樹;映射單元,用于將語義二叉樹的節(jié)點信息歸納并映射到相應(yīng)的優(yōu)化代碼片段;注入單元,用于將代碼片段注入到進程空間。本發(fā)明實施例的斷點調(diào)試方法和調(diào)試器,能夠解決了在調(diào)試器處理繁瑣的條件斷點表達式時所遇到的執(zhí)行效率低下問題,從而大幅提升調(diào)試器的執(zhí)行效率。
圖1為現(xiàn)有技術(shù)的基于棧結(jié)構(gòu)的表達式計算算法;圖2為現(xiàn)有技術(shù)的基于語義二叉樹結(jié)構(gòu)的表達式計算算法;圖3為本發(fā)明一實施例的斷點調(diào)試方法流程圖;圖4為本發(fā)明一實施例的調(diào)試器示意結(jié)構(gòu)圖;圖5為本發(fā)明一實施例的決策圖;圖6為根據(jù)圖5簡化后的決策圖;圖7為根據(jù)圖6簡化后最終的有序二叉決策圖;圖8為根據(jù)圖7形成的判斷流程圖;圖9為本發(fā)明一實施例的語義二叉樹;圖10示意性示出了一種斷點調(diào)試方法的處理系統(tǒng)。
具體實施例方式下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進一步的詳細(xì)描述。圖3為本發(fā)明一實施例的斷點調(diào)試方法流程圖。在步驟301,接收調(diào)試中的條件斷點。調(diào)試器在調(diào)試中接收來自用戶設(shè)置的條件斷點,包括用戶設(shè)置的全局條件斷點。在步驟302,解析所述條件斷點,獲得其中的斷點信息。調(diào)試器對在調(diào)試過程中接收到條件斷點進行解析,獲得條件斷點中的斷點信息包括操作符、變量對應(yīng)的進程地址和立即數(shù)。在步驟303,將所述斷點信息組織并生成決策圖。在一個實施例中,現(xiàn)以條件斷點表達式(address_regfile
>= 10 data_ regfile[l] <= 13)Minsncounter >= 10)為例來描述有序二叉決策圖的生成過程。上述條件斷點的斷點信息可以由布爾函數(shù)來表示,并根據(jù)布爾函數(shù)性質(zhì)來生成決策圖。首先,將條件斷點中的address_regfile W] > = 10用Xl來替代,data_ regfile[l] <= 13用X2來替代,insncounter > = 10用X3來替代,條件斷點表達式等效為(Xl| |X2)&&X3,而布爾代數(shù)是由非空集合B(B中至少含有兩個不同元素),以及B上的二元運算“ · ”、“ + ”,一元運算“'”組成的多元組,因此可以將條件斷點中的“&&”運算符映射為布爾代數(shù)運算符“ · ”,將條件斷點“I I”運算符映射為“ + ”運算符,因此該條件斷點對應(yīng)的在變量序π :xl < χ2 < χ3下的布爾函數(shù)為f (xl,x2,x;3) = (xl+x2) ·χ3,它對應(yīng)的布爾函數(shù)族 #f(xl,x2, x3) = {(xl+x2) · x3, (x2 · x3),x3,0,l}。根據(jù)上述的布爾函數(shù)族,生成如圖5所示的決策圖,其中節(jié)點的0-分支用虛線連接,節(jié)點的1-分支用實線連接,圖5中描述出布爾函數(shù)族在xl,x2,x3不同取值情況下各路徑對應(yīng)的結(jié)果。圖中的X3節(jié)點存在著子節(jié)點完全相同的情況,也就是說明其對應(yīng)相同的布爾函數(shù),因此可以將這些冗余的節(jié)點進行合并形成如圖6所示的決策圖。在如圖6所示的決策圖中,在Xl的1-分支上無論X2結(jié)點取何值都不會影響該條路徑的最終值,因此,Xl的1-分支上的X2結(jié)點可被刪除,同理在Xl的0-分支上的結(jié)點X3 也被刪除,最終形成如圖7所示的最簡有序二叉決策圖。針對圖7所示的最簡有序二叉決策圖可采用遞歸算法進行進一步的分析,例如, 當(dāng)圖7中的X3節(jié)點取值為0時,該有序二叉決策圖的布爾函數(shù)值始終為0,則條件斷點不成立;當(dāng)X3節(jié)點取值為1,且Xl或X2取值為1時,該有序二叉決策圖的布爾函數(shù)值為1,則條件斷點成立。有序二叉決策圖的分析結(jié)果描述成如圖8的模式。在步驟304,將所述決策圖展開為語義二叉樹。在一個實施例中,可以通過分析決策圖生成有序二叉決策圖,再將有序二叉決策圖展開為語義二叉樹。上述生成有序二叉決策圖的方法可以采用Bryant提出的有序二叉決策圖簡化算法。在步驟305,將所述語義二叉樹的節(jié)點信息歸納并映射到相應(yīng)的優(yōu)化代碼片段。調(diào)試器根據(jù)最簡有序二叉決策圖展開為語義二叉樹,并將語義二叉樹樹上的各類操作符節(jié)點信息的特征碼構(gòu)成的模式映射到不同的優(yōu)化代碼片段上。在一個實施例中,描述如何將語義二叉樹的節(jié)點信息映射到相應(yīng)的優(yōu)化代碼片上。首先,將條件斷點表達式(address_regfile
> = 10 | | data_regfile[1] < = 13)Minsncounter >= 10)生成如圖9所示的語義二叉樹,圖9中虛線指引的各個操作符對應(yīng)于圖7中的各個節(jié)點。然后通過采用深度優(yōu)選算法遍歷該語義二叉樹,以Xl節(jié)點為例, 其左孩子的屬性為addr32,代表該操作數(shù)是32位,需要從相應(yīng)的地址獲??;而右孩子為u_ imm32,代表該操作數(shù)為32位的無符號立即數(shù),而Xl節(jié)點代表ge,表示“> =”操作,因此Xl 節(jié)點的模式集合為{addr32,ge, u_imm32},通過查詢代碼片段表并獲取相應(yīng)的指令片段信肩、ο而諸如跳轉(zhuǎn)等需要目的地址的指令,在遍歷語義二叉樹生成代碼片段的過程中只需要填入相應(yīng)的指令保留位,而目的的地址則根據(jù)目的的地址所需要的字節(jié)數(shù)以0值的形式填入指令槽中,在后續(xù)工作中完成地址的分配。在如圖8中,當(dāng)X3的取值不為1時,條件斷點判斷失敗,程序流需要跳轉(zhuǎn)到下一個斷點起始處,而當(dāng)X3為1時,同時Xl也為1則同樣跳轉(zhuǎn)到下一個全局?jǐn)帱c的起始處,否則繼續(xù)判斷X2。因此,X3中jump指令的目的地址是下一斷點的起始處,而Xl中jump指令的目的地址則是該斷點的return語句的起始處。在步驟306中,將所述代碼片段注入到進程空間,進行斷點信息判斷。調(diào)試器將獲取的指令片段信息注入到進程空間,為實現(xiàn)代碼片段的注入,調(diào)試器需要開辟一段獨立有效,并占據(jù)一定字節(jié)數(shù)的進程空間。在本發(fā)明實施例中,通過調(diào)試器預(yù)先加載一個有效的靜態(tài)庫實現(xiàn),通過在靜態(tài)庫的原始C文件中嵌入大量的空操作(nop)語句實現(xiàn)進程空間的占用。在調(diào)試器執(zhí)行時,只需將生成好的代碼段覆蓋原始C文件中的nop 語句處即可實現(xiàn)。靜態(tài)庫如下所示
Int breakpoint-test (void) {
_asm {
nop /*空操作語句*/
nop
nop
nop }
return -1;
}在代碼片段注入到進程空間后,調(diào)試器通過調(diào)用breakpointjest函數(shù)即可以實現(xiàn)對斷點的判斷并執(zhí)行。圖4為本發(fā)明一實施例的調(diào)試器示意結(jié)構(gòu)圖。如圖所示40表示調(diào)試器,41表示接收單元,42表示解析單元,43表示生成單元,44表示展開單元,45表示映射單元,以及46 表示注入單元。接收單元41用于接收調(diào)試中的條件斷點信息;解析單元42用于解析條件斷點信息,獲得斷點信息;生成單元43用于將條件斷點中的斷點信息組織生成決策圖;展開單元 44用于用于將決策圖展開為語義二叉樹,或者用于分析決策圖并生成有序二叉決策圖,將有序二叉決策圖展開成語義二叉樹。映射單元45用于用于將語義二叉樹的節(jié)點信息歸納并映射到相應(yīng)的優(yōu)化代碼片段;注入單元46用于將代碼片段注入到進程空間。在本實施例中,首先由調(diào)試器40的接收單元41接收來自用戶設(shè)置的斷點信息,包括用戶設(shè)置的全局?jǐn)帱c信息。接收單元41在調(diào)試中可以接收來自用戶設(shè)置的大規(guī)模全局條件斷點信息,解析單元42對接收單元41在調(diào)試中接收的條件斷點信息進行解析,解析出條件斷點信息中的斷點信息,再由生成單元43根據(jù)解析單元42解析出的條件斷點信息生成決策圖,優(yōu)選地,生成單元43可以將斷點信息中的條件斷點采用布爾函數(shù)來表示,根據(jù)布爾函數(shù)來生成決策圖,再由展開單元44對上述決策圖展開為語義二叉樹,或者用于分析上述決策圖并生成有序二叉決策圖,將有序二叉決策圖展開成語義二叉樹,最后由映射單元45根據(jù)語義二叉樹的節(jié)點信息的特征碼構(gòu)成的模式將其映射到相應(yīng)的優(yōu)化代碼片段。 調(diào)試器40通過注入單元46將上述優(yōu)化代碼片段注入到進程空間,判斷并執(zhí)行。圖10示意性示出了一種斷點調(diào)試方法的處理系統(tǒng)。圖3中所示的斷點調(diào)試方法可以在該系統(tǒng)中實現(xiàn)。圖10中所示的處理系統(tǒng)包括CPU (中央處理器)1001,RAM(隨機存取器)1002,ROM (只讀存儲器)1003,系統(tǒng)總線1004,硬盤控制器1005,鼠標(biāo)控制器1006,鍵盤控制器1007,顯示器控制器1008,硬盤1009,鼠標(biāo)1010,鍵盤1012,顯示器1013。在這些部件中,與系統(tǒng)總線1004相連的有CPU1001、RAM1002、R0M1003、硬盤控制器1005,鼠標(biāo)控制器1006,鍵盤控制器1007和顯示器控制器1008。硬盤1009與硬盤控制器1005相連,鼠標(biāo)1010與鼠標(biāo)控制器1006相連,鍵盤1012與鍵盤控制器1007相連,以及顯示器1013與顯示器控制器1008相連。
圖10中每個部件的功能在本技術(shù)領(lǐng)域內(nèi)都是眾所周知的,并且圖10所示的結(jié)構(gòu)也是常規(guī)的。通常作為軟件存儲在硬盤1009中的計算機可讀指令控制。在圖3中所示的流程圖的基礎(chǔ)上,對于一個技術(shù)領(lǐng)域內(nèi)熟練的技術(shù)人員無需創(chuàng)造性的工作即可開發(fā)出一個或更多的軟件,這樣開發(fā)出的軟件將執(zhí)行圖3所示的斷點調(diào)試方法。專業(yè)人員應(yīng)該還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。 這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。 專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。以上所述的具體實施方式
,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施方式
而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種斷點調(diào)試方法,其特征在于,所述方法包括 接收調(diào)試中的條件斷點;解析所述條件斷點,獲得斷點信息; 將所述斷點信息組織并生成決策圖; 將所述決策圖展開為語義二叉樹;將所述語義二叉樹的節(jié)點信息歸納并映射到相應(yīng)的優(yōu)化代碼片段; 將所述代碼片段注入到進程空間,進行斷點信息判斷。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于將所述決策圖展開為語義二叉樹步驟替代為分析所述決策圖并生成有序二叉決策圖,將所述有序二叉決策圖展開為語義二叉樹。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于所述將所述斷點信息組織生成決策圖步驟包括將所述斷點信息由布爾函數(shù)來表示,根據(jù)布爾函數(shù)性質(zhì)來生成決策圖。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于采用有序二叉決策圖簡化算法將所述決策圖生成有序二叉決策圖。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于所述將所述語義二叉樹的節(jié)點信息歸納并映射到相應(yīng)的優(yōu)化代碼片段的步驟是根據(jù)所述語義二叉樹的節(jié)點信息的特征碼構(gòu)成的模式將其映射到相應(yīng)的優(yōu)化代碼片段。
6.根據(jù)權(quán)利要求1或2所述的方法,其特征在于所述將所述代碼片段注入到進程空間包括預(yù)先加載一個有效的靜態(tài)庫,通過在所述靜態(tài)庫的原始C文件中嵌入空操作語句實現(xiàn)進程空間的劃分;將所述代碼片段覆蓋所述空操作語句。
7.—種調(diào)試器,其特征在于,所述調(diào)試器包括 接收單元,用于接收調(diào)試中的條件斷點;解析單元,用于解析所述條件斷點,獲得斷點信息; 生成單元,用于將所述斷點信息組織生成決策圖;展開單元,用于將所述決策圖展開為語義二叉樹,或者用于分析所述決策圖并生成有序二叉決策圖,將所述有序二叉決策圖展開成語義二叉樹;映射單元,用于將所述語義二叉樹的節(jié)點信息歸納并映射到相應(yīng)的優(yōu)化代碼片段; 注入單元,用于將所述代碼片段注入到進程空間。
8.根據(jù)權(quán)利要求7所述的調(diào)試器,其特征在于所述生成單元將所述斷點信息由布爾函數(shù)來表示,根據(jù)布爾函數(shù)性質(zhì)來生成決策圖。
9.根據(jù)權(quán)利要求7所述的調(diào)試器,其特征在于所述展開單元采用有序二叉決策圖簡化算法將所述決策圖生成有序二叉決策圖。
10.根據(jù)權(quán)利要求7所述的調(diào)試器,其特征在于所述映射單元根據(jù)所述語義二叉樹的節(jié)點信息的特征碼構(gòu)成的模式將其映射到相應(yīng)的優(yōu)化代碼片段。
全文摘要
本發(fā)明涉及一種斷點調(diào)試方法和調(diào)試器。所述調(diào)試方法包括以下步驟接收調(diào)試中的條件斷點;解析所述條件斷點,獲得斷點信息;將所述斷點信息組織成決策圖;分析所述決策圖選擇生成有序二叉決策圖或展開為語義二叉樹;將所述有序二叉決策圖的節(jié)點展開形成語義二叉樹;將所述語義二叉樹的節(jié)點信息映射到相應(yīng)的優(yōu)化代碼片段上;將所述代碼片段注入到進程空間,進行斷點信息判斷。所述調(diào)試器包括如下功能單元接收單元、解析單元、生成單元、展開單元、映射單元和注入單元。根據(jù)本發(fā)明的調(diào)試方法和調(diào)試器,可以大幅提升調(diào)試器的執(zhí)行效率。
文檔編號G06F11/36GK102411534SQ20111020957
公開日2012年4月11日 申請日期2011年7月25日 優(yōu)先權(quán)日2011年7月25日
發(fā)明者侯朝煥, 彭楚, 朱浩, 洪纓, 王東輝 申請人:中國科學(xué)院聲學(xué)研究所