一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法、裝置及調(diào)試器的制造方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法,調(diào)試器設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn);本發(fā)明還公開(kāi)了一種數(shù)據(jù)斷點(diǎn)監(jiān)控裝置、調(diào)試器,通過(guò)本發(fā)明的方案,可以設(shè)置第一觸發(fā)點(diǎn)為被調(diào)試程序中任意的全局變量或局部變量,實(shí)現(xiàn)對(duì)任意變量的監(jiān)控。
【專(zhuān)利說(shuō)明】一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法、裝置及調(diào)試器
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)調(diào)試技術(shù),尤其涉及一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法、裝置及調(diào)試器。
【背景技術(shù)】
[0002]數(shù)據(jù)斷點(diǎn)監(jiān)控涉及的程序越來(lái)越龐大,程序內(nèi)部的關(guān)聯(lián)越來(lái)越多,內(nèi)存問(wèn)題也相應(yīng)越來(lái)越多。因此,出現(xiàn)了內(nèi)存越界讀寫(xiě)、空指針讀寫(xiě)、非法地址讀寫(xiě)等內(nèi)存問(wèn)題,這些問(wèn)題一直困擾著軟件開(kāi)發(fā)人員。
[0003]調(diào)試器是一種幫助開(kāi)發(fā)人員分析和定位程序故障的工具,不僅能夠在被調(diào)試程序中設(shè)置斷點(diǎn)、查看變量和寄存器、顯示堆棧和求表達(dá)式值,而且能夠控制被調(diào)試程序單步進(jìn)入、單步跳過(guò)、單步返回、暫掛、繼續(xù)運(yùn)行等操作。
[0004]目前常用的調(diào)試器僅能對(duì)被調(diào)試程序中內(nèi)存地址固定的全局變量進(jìn)行數(shù)據(jù)斷點(diǎn)監(jiān)控,而由于被調(diào)試程序中局部變量對(duì)應(yīng)的內(nèi)存地址存在的時(shí)間比較短,現(xiàn)有調(diào)試器無(wú)法實(shí)現(xiàn)對(duì)內(nèi)存地址不確定的局部變量進(jìn)行數(shù)據(jù)斷點(diǎn)監(jiān)控。
【發(fā)明內(nèi)容】
[0005]本發(fā)明主要提供一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法、裝置及調(diào)試器,能夠?qū)Ρ徽{(diào)試程序中任意變量進(jìn)行數(shù)據(jù)斷點(diǎn)監(jiān)控。
[0006]本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0007]本發(fā)明提供一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法,該方法包括:
[0008]調(diào)試器設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn)。
[0009]上述方案中,所述調(diào)試器設(shè)置第一觸發(fā)點(diǎn)為:所述調(diào)試器在被調(diào)試程序指定位置設(shè)置用于開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn)。
[0010]上述方案中,所述根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器包括:調(diào)試器確定出第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中有開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,根據(jù)第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器。
[0011]上述方案中,所述根據(jù)第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性設(shè)置數(shù)據(jù)斷點(diǎn)寄存器為:
[0012]當(dāng)?shù)谝挥|發(fā)點(diǎn)對(duì)應(yīng)全局變量名時(shí),所述調(diào)試器通過(guò)查找符號(hào)表獲得所述全局變量名對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)監(jiān)控地址;
[0013]當(dāng)?shù)谝挥|發(fā)點(diǎn)對(duì)應(yīng)內(nèi)存地址時(shí),所述調(diào)試器將所述內(nèi)存地址進(jìn)行字符串轉(zhuǎn)換獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;
[0014]當(dāng)?shù)谝挥|發(fā)點(diǎn)對(duì)應(yīng)局部變量名時(shí),所述調(diào)試器通過(guò)分析被調(diào)試程序上下文獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;
[0015]所述調(diào)試器在獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址后,將所獲得的數(shù)據(jù)斷點(diǎn)監(jiān)控地址及監(jiān)控屬性分別寫(xiě)入數(shù)據(jù)斷點(diǎn)地址寄存器和控制寄存器。
[0016]上述方案中,所述調(diào)試器根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn)為:所述調(diào)試器根據(jù)所述數(shù)據(jù)斷點(diǎn)控制寄存器中的監(jiān)控屬性對(duì)所述數(shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行監(jiān)控。
[0017]上述方案中,所述調(diào)試器設(shè)置第二觸發(fā)點(diǎn),在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器。
[0018]上述方案中,所述調(diào)試器設(shè)置第二觸發(fā)點(diǎn)為:所述調(diào)試器在被調(diào)試程序指定位置設(shè)置用于關(guān)閉自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn)。
[0019]上述方案中,所述根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器為:調(diào)試器確定出第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中有關(guān)閉自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性刪除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器。
[0020]本發(fā)明提供一種數(shù)據(jù)斷點(diǎn)監(jiān)控裝置,該裝置包括:第一設(shè)置模塊、第二設(shè)置模塊、觸發(fā)模塊和監(jiān)控模塊;
[0021]所述第一設(shè)置模塊,用于設(shè)置第一觸發(fā)點(diǎn);
[0022]所述觸發(fā)模塊,用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),通知所述第二設(shè)置模塊;
[0023]所述第二設(shè)置模塊,用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器;
[0024]所述監(jiān)控模塊,用于根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn)。
[0025]上述方案中,所述裝置還包括:清除模塊,用于在第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)寄存器;
[0026]相應(yīng)的,所述第一設(shè)置模塊,還用于設(shè)置第二觸發(fā)點(diǎn);
[0027]相應(yīng)的,所述觸發(fā)模塊,還用于在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),通知所述清除模塊。
[0028]本發(fā)明還提供一種調(diào)試器,該調(diào)試器包括:以上所述的數(shù)據(jù)斷點(diǎn)監(jiān)控裝置。
[0029]本發(fā)明提供了一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法、裝置及調(diào)試器,調(diào)試器設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控第一觸發(fā)點(diǎn);如此,可以設(shè)置第一觸發(fā)點(diǎn)為被調(diào)試程序中任意的全局變量或局部變量,實(shí)現(xiàn)對(duì)任意變量的監(jiān)控。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0030]圖1為本發(fā)明實(shí)現(xiàn)的數(shù)據(jù)斷點(diǎn)監(jiān)控方法的流程示意圖;
[0031]圖2為本發(fā)明實(shí)現(xiàn)的數(shù)據(jù)斷點(diǎn)關(guān)閉方法的流程示意圖;
[0032]圖3為本發(fā)明實(shí)現(xiàn)的數(shù)據(jù)斷點(diǎn)監(jiān)控裝置的結(jié)構(gòu)示意圖;
[0033]圖4為本發(fā)明實(shí)現(xiàn)的調(diào)試器的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0034]本發(fā)明實(shí)施例中,調(diào)試器設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控第一觸發(fā)點(diǎn)。
[0035]下面通過(guò)附圖及具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明。
[0036]本發(fā)明實(shí)現(xiàn)一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法,如圖1所示,該方法主要包括以下步驟:
[0037]步驟101:調(diào)試器設(shè)置第一觸發(fā)點(diǎn);
[0038]具體的,調(diào)試器采用向計(jì)算機(jī)內(nèi)核發(fā)送31(^10?信號(hào)的方式暫停被調(diào)試程序運(yùn)行,在被調(diào)試程序指定位置設(shè)置一個(gè)用于開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn),所述數(shù)據(jù)斷點(diǎn)即為第一觸發(fā)點(diǎn),所述數(shù)據(jù)斷點(diǎn)的屬性包括如下數(shù)據(jù)斷點(diǎn)信息:開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志、數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性等,所述數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的變量名可以是全局變量名或局部變量名。
[0039]這里,所述數(shù)據(jù)斷點(diǎn)的屬性還可以包括數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息,所述數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度用于控制數(shù)據(jù)斷點(diǎn)監(jiān)控范圍。
[0040]所述指定位置一般為需要監(jiān)控的全局變量或局部變量在被調(diào)試程序中的位置。
[0041]步驟102:在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器;
[0042]具體的,在被調(diào)試程序命中第一觸發(fā)點(diǎn)時(shí),被調(diào)試程序通過(guò)計(jì)算機(jī)內(nèi)核向調(diào)試器通知第一觸發(fā)點(diǎn)異常,調(diào)試器判斷第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中是否有開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,如果有,則根據(jù)第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器。其中,所述設(shè)置數(shù)據(jù)斷點(diǎn)寄存器可以為:如果第一觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)全局變量名,那么所述調(diào)試器可以通過(guò)查找符號(hào)表獲得所述全局變量名對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)監(jiān)控地址,其中,符號(hào)表可以由調(diào)試器分析被調(diào)試程序的全局變量獲得,所述符號(hào)表中保存所有全局變量對(duì)應(yīng)的內(nèi)存地址;如果第一觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)內(nèi)存地址,那么所述調(diào)試器可以將所述內(nèi)存地址進(jìn)行字符串轉(zhuǎn)換獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;如果第一觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)局部變量名,那么所述調(diào)試器可以通過(guò)分析被調(diào)試程序上下文獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;所述調(diào)試器在獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址后,通過(guò)計(jì)算機(jī)內(nèi)核提供的?廿狀6()系統(tǒng)函數(shù)將所獲得的數(shù)據(jù)斷點(diǎn)監(jiān)控地址及監(jiān)控屬性分別寫(xiě)入數(shù)據(jù)斷點(diǎn)地址寄存器和控制寄存器,所述數(shù)據(jù)斷點(diǎn)地址寄存器和控制寄存器為預(yù)先設(shè)置的兩個(gè)空寄存器。
[0043]這里,所述調(diào)試器還可以將數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息寫(xiě)入控制寄存器。
[0044]步驟103:調(diào)試器根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn);
[0045]具體的,調(diào)試器根據(jù)控制寄存器中的監(jiān)控屬性對(duì)數(shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行監(jiān)控,如:監(jiān)控屬性為讀操作時(shí),調(diào)試器監(jiān)控?cái)?shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域是否被讀??;監(jiān)控屬性為寫(xiě)操作時(shí),調(diào)試器監(jiān)控?cái)?shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域是否被改寫(xiě)。
[0046]本步驟中,所述調(diào)試器還根據(jù)控制寄存器中的數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度,在數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度范圍內(nèi)對(duì)數(shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行監(jiān)控。
[0047]此外,本發(fā)明還給出了關(guān)閉自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的方法,如圖2所示,該方法主要包括以下步驟:
[0048]步驟201:調(diào)試器設(shè)置第二觸發(fā)點(diǎn);
[0049]具體的,調(diào)試器采用向計(jì)算機(jī)內(nèi)核發(fā)送31(^10?信號(hào)的方式暫停被調(diào)試程序運(yùn)行,在被調(diào)試程序指定位置設(shè)置一個(gè)用于關(guān)閉自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn),所述數(shù)據(jù)斷點(diǎn)即為第二觸發(fā)點(diǎn),所述數(shù)據(jù)斷點(diǎn)的屬性包括如下數(shù)據(jù)斷點(diǎn)信息:關(guān)閉自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志、數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性等,所述數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的變量名可以是全局變量名或局部變量名。這里,所述數(shù)據(jù)斷點(diǎn)的屬性還可以包括數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息,所述數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度用于控制數(shù)據(jù)斷點(diǎn)監(jiān)控范圍。
[0050]步驟202:在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器;
[0051]具體的,在被調(diào)試程序命中第二觸發(fā)點(diǎn)時(shí),被調(diào)試程序通過(guò)計(jì)算機(jī)內(nèi)核向調(diào)試器通知第二觸發(fā)點(diǎn)異常,調(diào)試器判斷第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中是否有關(guān)閉自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,如果有,則根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性刪除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器。其中,所述根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性刪除對(duì)應(yīng)可以為:如果第二觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)全局變量名,那么所述調(diào)試器可以通過(guò)查找符號(hào)表獲得所述全局變量名對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)監(jiān)控地址,其中,符號(hào)表可以由調(diào)試器分析被調(diào)試程序的全局變量獲得,所述符號(hào)表中保存所有全局變量對(duì)應(yīng)的內(nèi)存地址;如果第二觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)內(nèi)存地址,那么所述調(diào)試器可以將所述內(nèi)存地址進(jìn)行字符串轉(zhuǎn)換獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;如果第二觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)局部變量名,那么所述調(diào)試器可以通過(guò)分析被調(diào)試程序上下文獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;所述調(diào)試器在獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址后,通過(guò)計(jì)算機(jī)內(nèi)核將獲得的數(shù)據(jù)斷點(diǎn)監(jiān)控地址與數(shù)據(jù)斷點(diǎn)地址寄存器中的監(jiān)控地址比較,如果相同,則將所述數(shù)據(jù)斷點(diǎn)地址寄存器中的所述監(jiān)控地址清除;并將所述監(jiān)控屬性與數(shù)據(jù)斷點(diǎn)控制寄存器中的監(jiān)控屬性比較,如果相同,則將所述數(shù)據(jù)斷點(diǎn)控制寄存器中的所述監(jiān)控屬性清除。
[0052]這里,所述調(diào)試器還可以將數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息從所述數(shù)據(jù)斷點(diǎn)控制寄存器中清除。
[0053]為了實(shí)現(xiàn)上述方法,本發(fā)明還提供一種數(shù)據(jù)斷點(diǎn)監(jiān)控裝置,如圖3所示,該數(shù)據(jù)斷點(diǎn)監(jiān)控裝置36包括:第一設(shè)置模塊31、第二設(shè)置模塊32、觸發(fā)模塊33、監(jiān)控模塊34,
[0054]第一設(shè)置模塊31,用于設(shè)置第一觸發(fā)點(diǎn);
[0055]第二設(shè)置模塊32,用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器;
[0056]觸發(fā)模塊33,用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),通知第二設(shè)置模塊32 ;
[0057]監(jiān)控模塊34,用于根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn);
[0058]第一設(shè)置模塊31,具體用于在被調(diào)試程序指定位置設(shè)置一個(gè)用于開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn),所述數(shù)據(jù)斷點(diǎn)即為第一觸發(fā)點(diǎn);
[0059]其中,所述數(shù)據(jù)斷點(diǎn)的屬性包括如下數(shù)據(jù)斷點(diǎn)信息:開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志、數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性等,所述數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的變量名可以是全局變量名或局部變量名;
[0060]所述數(shù)據(jù)斷點(diǎn)的屬性還可以包括數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息,所述數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度用于控制數(shù)據(jù)斷點(diǎn)監(jiān)控范圍。
[0061]觸發(fā)模塊33,具體用于在被調(diào)試程序命中第一觸發(fā)點(diǎn)時(shí),第一觸發(fā)點(diǎn)被觸發(fā),通過(guò)計(jì)算機(jī)內(nèi)核向第二設(shè)置模塊32通知第一觸發(fā)點(diǎn)異常;
[0062]第二設(shè)置模塊32,具體用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),判斷第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中是否有開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,如果有,則根據(jù)第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中的數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性設(shè)置數(shù)據(jù)斷點(diǎn)寄存器;
[0063]其中,所述第二設(shè)置模塊32,具體還用于如果第一觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)全局變量名,那么可以通過(guò)查找符號(hào)表獲得所述全局變量名對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)監(jiān)控地址,其中,符號(hào)表可以通過(guò)分析被調(diào)試程序的全局變量獲得,所述符號(hào)表中保存所有全局變量對(duì)應(yīng)的內(nèi)存地址;如果第一觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)內(nèi)存地址,那么可以將所述內(nèi)存地址進(jìn)行字符串轉(zhuǎn)換獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;如果第一觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)局部變量名,那么可以通過(guò)分析被調(diào)試程序上下文獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;在獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址后,通過(guò)計(jì)算機(jī)內(nèi)核提供的?廿%60系統(tǒng)函數(shù)將所獲得的數(shù)據(jù)斷點(diǎn)監(jiān)控地址及監(jiān)控屬性分別寫(xiě)入數(shù)據(jù)斷點(diǎn)地址寄存器和控制寄存器,所述數(shù)據(jù)斷點(diǎn)地址寄存器和控制寄存器為預(yù)先設(shè)置的兩個(gè)空寄存器。
[0064]所述第二設(shè)置模塊32,具體還用于將數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息寫(xiě)入控制寄存器。
[0065]監(jiān)控模塊34,具體用于根據(jù)控制寄存器中的監(jiān)控屬性對(duì)數(shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行監(jiān)控。例如:監(jiān)控屬性為讀操作時(shí),監(jiān)控?cái)?shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域是否被讀取;監(jiān)控屬性為寫(xiě)操作時(shí),監(jiān)控?cái)?shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域是否被改寫(xiě)。
[0066]監(jiān)控模塊34,具體還用于根據(jù)監(jiān)控寄存器中的數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度,在數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度范圍內(nèi)對(duì)數(shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行監(jiān)控。
[0067]該裝置還包括:清除模塊35,用于在第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)寄存器;
[0068]相應(yīng)的,第一設(shè)置模塊31,還用于設(shè)置第二觸發(fā)點(diǎn);
[0069]相應(yīng)的,觸發(fā)模塊33,還用于在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),通知清除模塊35 ;
[0070]第一設(shè)置模塊31,具體還用于在被調(diào)試程序指定位置設(shè)置一個(gè)用于關(guān)閉自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn),所述數(shù)據(jù)斷點(diǎn)為第二觸發(fā)點(diǎn);
[0071]其中,所述數(shù)據(jù)斷點(diǎn)的屬性包括如下數(shù)據(jù)斷點(diǎn)信息:關(guān)閉自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志、數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性等,所述數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的變量名可以是全局變量名或局部變量名;
[0072]所述數(shù)據(jù)斷點(diǎn)的屬性還可以包括數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息,所述數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度用于控制數(shù)據(jù)斷點(diǎn)監(jiān)控范圍。
[0073]清除模塊35,具體用于判斷第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中是否有關(guān)閉自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,如果有,則根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性刪除對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器;
[0074]所述清除模塊35具體用于:如果第二觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)全局變量名,那么可以通過(guò)查找符號(hào)表獲得所述全局變量名對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)監(jiān)控地址,其中,符號(hào)表可以通過(guò)分析被調(diào)試程序的全局變量獲得,所述符號(hào)表中保存所有全局變量對(duì)應(yīng)的內(nèi)存地址;如果第二觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)內(nèi)存地址,那么可以將所述內(nèi)存地址進(jìn)行字符串轉(zhuǎn)換獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;如果第二觸發(fā)點(diǎn)對(duì)應(yīng)的是一個(gè)局部變量名,那么可以通過(guò)分析被調(diào)試程序上下文獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址;在獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址后,通過(guò)計(jì)算機(jī)內(nèi)核將獲得的數(shù)據(jù)斷點(diǎn)監(jiān)控地址與數(shù)據(jù)斷點(diǎn)地址寄存器中的監(jiān)控地址比較,如果相同,則將所述數(shù)據(jù)斷點(diǎn)地址寄存器中的所述監(jiān)控地址清除;并將所述監(jiān)控屬性與數(shù)據(jù)斷點(diǎn)控制寄存器中的監(jiān)控屬性比較,如果相同,則將所述數(shù)據(jù)斷點(diǎn)控制寄存器中的所述監(jiān)控屬性清除。
[0075]清除模塊35,具體還用于將數(shù)據(jù)斷點(diǎn)監(jiān)控長(zhǎng)度的數(shù)據(jù)斷點(diǎn)信息從所述數(shù)據(jù)斷點(diǎn)控制寄存器中清除。
[0076]本發(fā)明還提出一種調(diào)試器,如圖4所示,該調(diào)試器41包括圖3中的數(shù)據(jù)斷點(diǎn)監(jiān)控裝置36,
[0077]所述數(shù)據(jù)斷點(diǎn)監(jiān)控裝置36,用于設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn);其中,具體設(shè)置方法和監(jiān)控方法同上述圖3,這里不再贅述。
[0078]所述數(shù)據(jù)斷點(diǎn)監(jiān)控裝置36,還用于設(shè)置第二觸發(fā)點(diǎn),在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除所述數(shù)據(jù)斷點(diǎn)寄存器;具體清除方法同上述圖3,這里不再贅述。
[0079]綜上所述,本發(fā)明通過(guò)調(diào)試器設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控第一觸發(fā)點(diǎn);如此,可以設(shè)置第一觸發(fā)點(diǎn)為被調(diào)試程序中任意的全局變量或局部變量,實(shí)現(xiàn)對(duì)任意變量的監(jiān)控。本發(fā)明還通過(guò)調(diào)試器設(shè)置第二觸發(fā)點(diǎn),在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除所述數(shù)據(jù)斷點(diǎn)寄存器;如此,可以設(shè)置第二觸發(fā)點(diǎn)為被調(diào)試程序中任意的全局變量或局部變量,實(shí)現(xiàn)對(duì)任意變量的清除。
[0080]以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)斷點(diǎn)監(jiān)控方法,其特征在于,該方法包括: 調(diào)試器設(shè)置第一觸發(fā)點(diǎn),在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,并根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述調(diào)試器設(shè)置第一觸發(fā)點(diǎn)為:所述調(diào)試器在被調(diào)試程序指定位置設(shè)置用于開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器包括:調(diào)試器確定出第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中有開(kāi)啟自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,根據(jù)第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性設(shè)置數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性設(shè)置數(shù)據(jù)斷點(diǎn)寄存器為:當(dāng)?shù)谝挥|發(fā)點(diǎn)對(duì)應(yīng)全局變量名時(shí),所述調(diào)試器通過(guò)查找符號(hào)表獲得所述全局變量名對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)監(jiān)控地址; 當(dāng)?shù)谝挥|發(fā)點(diǎn)對(duì)應(yīng)內(nèi)存地址時(shí),所述調(diào)試器將所述內(nèi)存地址進(jìn)行字符串轉(zhuǎn)換獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址; 當(dāng)?shù)谝挥|發(fā)點(diǎn)對(duì)應(yīng)局部變量名時(shí),所述調(diào)試器通過(guò)分析被調(diào)試程序上下文獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址; 所述調(diào)試器在獲得數(shù)據(jù)斷點(diǎn)監(jiān)控地址后,將所獲得的數(shù)據(jù)斷點(diǎn)監(jiān)控地址及監(jiān)控屬性分別寫(xiě)入數(shù)據(jù)斷點(diǎn)地址寄存器和控制寄存器。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述調(diào)試器根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn)為:所述調(diào)試器根據(jù)所述數(shù)據(jù)斷點(diǎn)控制寄存器中的監(jiān)控屬性對(duì)所述數(shù)據(jù)斷點(diǎn)地址寄存器中數(shù)據(jù)斷點(diǎn)監(jiān)控地址對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行監(jiān)控。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述調(diào)試器設(shè)置第二觸發(fā)點(diǎn),在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述調(diào)試器設(shè)置第二觸發(fā)點(diǎn)為:所述調(diào)試器在被調(diào)試程序指定位置設(shè)置用于關(guān)閉自定義數(shù)據(jù)斷點(diǎn)監(jiān)控功能的數(shù)據(jù)斷點(diǎn)。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述根據(jù)所述第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器為:調(diào)試器確定出第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中有關(guān)閉自定義數(shù)據(jù)斷點(diǎn)功能標(biāo)志,根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息中數(shù)據(jù)斷點(diǎn)所對(duì)應(yīng)的內(nèi)存地址或變量名、和監(jiān)控屬性刪除對(duì)應(yīng)數(shù)據(jù)斷點(diǎn)寄存器,所述數(shù)據(jù)斷點(diǎn)寄存器包括數(shù)據(jù)斷點(diǎn)地址寄存器和數(shù)據(jù)斷點(diǎn)控制寄存器。
9.一種數(shù)據(jù)斷點(diǎn)監(jiān)控裝置,其特征在于,該裝置包括:第一設(shè)置模塊、第二設(shè)置模塊、觸發(fā)模塊和監(jiān)控模塊; 所述第一設(shè)置模塊,用于設(shè)置第一觸發(fā)點(diǎn); 所述觸發(fā)模塊,用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),通知所述第二設(shè)置模塊; 所述第二設(shè)置模塊,用于在所述第一觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)所述第一觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息設(shè)置數(shù)據(jù)斷點(diǎn)寄存器; 所述監(jiān)控模塊,用于根據(jù)所述數(shù)據(jù)斷點(diǎn)寄存器監(jiān)控所述第一觸發(fā)點(diǎn)。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述裝置還包括:清除模塊,用于在第二觸發(fā)點(diǎn)被觸發(fā)時(shí),根據(jù)第二觸發(fā)點(diǎn)的數(shù)據(jù)斷點(diǎn)信息清除對(duì)應(yīng)的數(shù)據(jù)斷點(diǎn)寄存器; 相應(yīng)的,所述第一設(shè)置模塊,還用于設(shè)置第二觸發(fā)點(diǎn); 相應(yīng)的,所述觸發(fā)模塊,還用于在所述第二觸發(fā)點(diǎn)被觸發(fā)時(shí),通知所述清除模塊。
11.一種調(diào)試器,其特征在于,包括如權(quán)利要求9或10所述的數(shù)據(jù)斷點(diǎn)監(jiān)控裝置。
【文檔編號(hào)】G06F11/26GK104461806SQ201310423291
【公開(kāi)日】2015年3月25日 申請(qǐng)日期:2013年9月16日 優(yōu)先權(quán)日:2013年9月16日
【發(fā)明者】吳春江 申請(qǐng)人:中興通訊股份有限公司