專利名稱:一種斷點調(diào)試方法和調(diào)試器的制作方法
技術(shù)領域:
本發(fā)明涉及計算機軟件設計,尤其涉及一種斷點調(diào)試方法和調(diào)試器。
背景技術(shù):
調(diào)試器是處理器體系結(jié)構(gòu)設計與軟硬件協(xié)同驗證中不可或缺的一部分。一方面, 它在軟件層次上對目標處理器的體系結(jié)構(gòu)進行建模來模擬其執(zhí)行行為,另一方面,通過提供調(diào)試接口,接收用戶輸入的各種控制信息,實現(xiàn)對程序執(zhí)行過程中的數(shù)據(jù)流、控制流的監(jiān)測及修改。調(diào)試器最基礎、最核心的功能之一是斷點功能,它可以讓程序中斷在需要的地方, 從而方便其分析。斷點又可以分為行斷點和條件斷點兩種,且以用戶輸入的條件斷點為主?,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ù),從棧中彈出相應個數(shù),計算后將結(jié)果再次壓入棧中。例如,當壓入操作符*的時候,需要將操作數(shù)c和b依次彈出棧,并計算b*c后將結(jié)果再壓入到棧中。具體過程如圖1 所示。第二種方案基于語義二叉樹結(jié)構(gòu)的表達式計算,按字符的優(yōu)先級組織成二叉樹結(jié)構(gòu),計算時應用深度優(yōu)先搜索算法從二叉樹的底層從左至右,從下至上依次進行計算。以第一種方案中的后綴表達式為例,處理的二叉樹結(jié)構(gòu)如圖2所示?,F(xiàn)有技術(shù)上述兩種方案存在的缺點是只能處理有限的固定模式,應用面窄,當通過調(diào)試接口輸入條件斷點信息時,繁瑣的表達式計算會嚴重影響調(diào)試器的執(zhí)行效率,嚴重影響調(diào)試器性能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種執(zhí)行效率高且穩(wěn)定可靠的斷點調(diào)試方法和調(diào)試器,來解決斷點信息中繁瑣的表達式計算問題,從而大幅提高了調(diào)試器的執(zhí)行效率。為實現(xiàn)上述目的,本發(fā)明提供了一種斷點調(diào)試方法,其特征在于包括以下步驟接收調(diào)試中的斷點信息;將所述斷點信息組合成斷點函數(shù)并輸出;加載動態(tài)鏈接庫,所述動態(tài)鏈接庫由所述斷點函數(shù)進行編譯生成。本發(fā)明還提供了一種調(diào)試器,其特征在于包括接收單元,用于接收調(diào)試中的斷點信息;輸出單元,用于將所述斷點信息組合成斷點函數(shù)并輸出;加載單元,用于加載所述動態(tài)鏈接庫。
本發(fā)明實施例的斷點調(diào)試方法和調(diào)試器,通過將調(diào)試器接收的斷點信息組合成函數(shù)并進行編譯,生成供調(diào)試器加載調(diào)用,并執(zhí)行的動態(tài)鏈接庫中的函數(shù),解決了調(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示意性示出了一種斷點調(diào)試方法的處理系統(tǒng)。
具體實施例方式下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進一步的詳細描述。圖3為本發(fā)明一實施例的斷點調(diào)試方法流程圖。在步驟301,接收調(diào)試中的斷點信息。調(diào)試器在調(diào)試中接收來自用戶設置的斷點信息,例如,用戶設置的條件斷點信息。 調(diào)試器將所有在調(diào)試中接收到的斷點信息存儲在斷點緩沖器中。在步驟302,對所述斷點信息組合成斷點函數(shù)并輸出。調(diào)試器在接收斷點信息完成后,將存儲在斷點緩沖器中的斷點信息組合成斷點函數(shù)并輸出。在一個實施例中,調(diào)試器將存儲在斷點緩沖器中的全部條件斷點信息和需要變量進程地址組合成斷點函數(shù)并輸出,上述輸出可以是輸出到C語言文件中。輸出的C語言文件的組織形式如下#define variable process—address…_declspec(dllexport)int_stdcall breakpoints_test(void){if(breakpint_expression_l)return 1 ;if(breakpint_expression_l)return2 ;…if(breakpint_expression_n)return η ;}其中各條件斷點由if語句包裝,在c語言級別上,當其中某一條件斷點滿足時,則返回相應的條件斷點編號,調(diào)試器暫停執(zhí)行。例如,上述語句“breakpintexpressiorul”為條件斷點表達式,其條件斷點編號為1,語句“return 1”為返回編號為1的條件斷點。當條件斷點表達式1滿足條件時,則返回到編號為1的條件斷點處,調(diào)試器暫停執(zhí)行。在步驟303,對所述斷點函數(shù)進行編譯,生成動態(tài)鏈接庫。當C語言文件輸出成功后,調(diào)試器調(diào)用第三方編譯器將步驟302中輸出的C語言文件進行編譯、匯編和鏈接,最后形成動態(tài)鏈接庫(DLL)。在一個實施例中,調(diào)試器調(diào)用C語言編譯器對輸出的C語言文件進行編譯、匯編和鏈接,形成DLL。在步驟304,加載所述動態(tài)鏈接庫。調(diào)試器加載在步驟303中形成的動態(tài)鏈接庫,加載后的動態(tài)鏈接庫可供調(diào)試器調(diào)用,調(diào)試器在對斷點的判斷時可直接調(diào)用函數(shù)breakpointsJestO。調(diào)試器在加載目標動態(tài)鏈接庫后,該動態(tài)鏈接庫和調(diào)試器將共享同一段進程空間,而對斷點條件判斷執(zhí)行中的各變量均可歸結(jié)到從固定地址取固定長度的數(shù)據(jù)進行處理。以條件斷點insncounter >=10為例,相應的聲明代碼如下所示#define address_register_fille
*(unsigned long*)0x008a3138#define data_register_fille
*(unsigned long氺)0x009a3138…#define insncounter*(_ _int64氺)0x010a3138上述聲明代碼中,條件斷點insncounter > = 10的有符號變量insncounter在進程空間中的地址為0x010a3138,因此條件斷點insncounter > = 10直接等價于*(_ _ int64*)0x010a3138 >= 10。圖4為本發(fā)明一實施例的調(diào)試器示意結(jié)構(gòu)圖。如圖所示40表示調(diào)試器,41表示接收單元,42表示存儲單元,43表示輸出單元,44表示加載單元,45表示執(zhí)行單元,以及46 表示斷點緩沖器。接收單元41用于接收調(diào)試中的斷點信息。存儲單元42用于存儲在調(diào)試中接收到的斷點信息。輸出單元43用于將所述斷點信息組合成斷點函數(shù)并輸出。加載單元44用于加載動態(tài)鏈接庫。調(diào)試器40的接收單元41接收來自用戶設置的斷點信息,例如,用戶設置的條件斷點信息。調(diào)試器40將所有在調(diào)試中接收到的斷點信息通過存儲單元42存儲在斷點緩沖器 46中。在調(diào)試器40接收斷點信息完成后,將存儲在斷點緩沖器46中的斷點信息組合成斷點函數(shù)并通過輸出單元43輸出。其中,調(diào)試器40將斷點緩沖器46中的條件斷點信息組合成斷點函數(shù)并輸出到C語言文件中,另外,將斷點緩沖器46中的條件斷點信息組合成斷點函數(shù)并輸出到C語言文件中的同時將所需要變量進程地址也一起輸出到C語言文件中。通過C語言編譯器對C語言文件進行編譯、匯編和鏈接后形成的動態(tài)鏈接庫G)LL)由調(diào)試器 40的加載單元44進行加載,加載后的動態(tài)鏈接庫可供調(diào)試器40的執(zhí)行單元45進行調(diào)用并判斷執(zhí)行。由此可以看出,本發(fā)明實施例的斷點調(diào)試方法和調(diào)試器采用第三方編譯器對條件斷點的函數(shù)進行編譯,并在經(jīng)匯編和鏈接后生成動態(tài)鏈接庫的方式來解決斷點信息中繁瑣的表達式計算問題,從而大幅提高了調(diào)試器的執(zhí)行效率。圖5示意性示出了一種斷點調(diào)試方法的處理系統(tǒng)。圖3中所示的斷點調(diào)試方法可以在該系統(tǒng)中實現(xiàn)。圖5中所示的處理系統(tǒng)包括CPU(中央處理器)501,RAM(隨機存取器)502,R0M(只讀存儲器)503,系統(tǒng)總線504,硬盤控制器505,鼠標控制器506,鍵盤控制器507,顯示器控制器508,硬盤509,鼠標510,鍵盤512,顯示器513。在這些部件中,與系統(tǒng)總線504相連的有CPTOO1、RAM502、R0M503、硬盤控制器505,鼠標控制器506,鍵盤控制器507和顯示器控制器508。硬盤509與硬盤控制器505相連,鼠標510與鼠標控制器506 相連,鍵盤512與鍵盤控制器507相連,以及顯示器513與顯示器控制器508相連。圖5中每個部件的功能在本技術(shù)領域內(nèi)都是眾所周知的,并且圖5所示的結(jié)構(gòu)也是常規(guī)的。通常作為軟件存儲在硬盤509中的計算機可讀指令控制。在圖3中所示的流程圖的基礎上,對于一個技術(shù)領域內(nèi)熟練的技術(shù)人員無需創(chuàng)造性的工作即可開發(fā)出一個或更多的軟件,這樣開發(fā)出的軟件將執(zhí)行圖3所示的斷點調(diào)試方法。專業(yè)人員應該還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。 這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應用和設計約束條件。 專業(yè)技術(shù)人員可以對每個特定的應用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應認為超出本發(fā)明的范圍。以上所述的具體實施方式
,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的具體實施方式
而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種斷點調(diào)試方法,其特征在于,所述方法包括接收調(diào)試中的斷點信息;將所述斷點信息組合成斷點函數(shù)并輸出;加載動態(tài)鏈接庫,所述動態(tài)鏈接庫由所述斷點函數(shù)進行編譯生成。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述接收調(diào)試中的斷點信息包括接收調(diào)試中的條件斷點信息。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于所述接收調(diào)試中的斷點信息步驟后還包括將接收的斷點信息存儲在斷點緩沖器中。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于將所述斷點信息組合成斷點函數(shù)并輸出步驟還包括將變量進程地址和所述斷點函數(shù)一起輸出。
5.根據(jù)權(quán)利要求1或4所述的方法,其特征在于所述輸出是輸出到C語言文件中。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于所述動態(tài)鏈接庫由所述斷點函數(shù)進行編譯生成步驟包括通過編譯器對所述斷點函數(shù)進行編譯,匯編和鏈接,生成動態(tài)鏈接庫。
7.—種調(diào)試器,其特征在于,所述調(diào)試器包括接收單元,用于接收調(diào)試中的斷點信息;輸出單元,用于將所述斷點信息組合成斷點函數(shù)并輸出;加載單元,用于根據(jù)所述斷點函數(shù)編譯生成動態(tài)鏈接庫,并加載所述動態(tài)鏈接庫。
8.根據(jù)權(quán)利要求7所述的調(diào)試器,其特征在于所述接收單元包括用于接收調(diào)試中的條件斷點信息。
9.根據(jù)權(quán)利要求7所述的調(diào)試器,其特征在于所述調(diào)試器還包括存儲單元,用于存儲所述接收的斷點信息。
10.根據(jù)權(quán)利要求7所述的調(diào)試器,其特征在于所述輸出單元包括用于將變量進程地址和所述斷點函數(shù)一起輸出。
11.根據(jù)權(quán)利要求7或10所述的調(diào)試器,其特征在于所述輸出單元輸出是輸出到C語言文件中。
全文摘要
本發(fā)明涉及一種斷點調(diào)試方法和調(diào)試器。所述斷點調(diào)試方法包括以下步驟接收調(diào)試中的斷點信息;將所述斷點信息組合成斷點函數(shù)并輸出;加載動態(tài)鏈接庫,所述動態(tài)鏈接庫由所述斷點函數(shù)進行編譯生成。所述調(diào)試器包括接收單元,用于接收調(diào)試中的斷點信息;輸出單元,用于將所述斷點信息組合成斷點函數(shù)并輸出;加載單元,用于加載動態(tài)鏈接庫。根據(jù)本發(fā)明的調(diào)試方法和調(diào)試器,可以大幅提升調(diào)試器的執(zhí)行效率。
文檔編號G06F11/36GK102262587SQ20111020745
公開日2011年11月30日 申請日期2011年7月22日 優(yōu)先權(quán)日2011年7月22日
發(fā)明者侯朝煥, 彭楚, 朱浩, 洪纓, 王東輝 申請人:中國科學院聲學研究所