欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于實(shí)現(xiàn)觀察點(diǎn)的方法和系統(tǒng)的制作方法

文檔序號(hào):6562918閱讀:171來(lái)源:國(guó)知局

專利名稱::用于實(shí)現(xiàn)觀察點(diǎn)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明一般涉及計(jì)算機(jī)領(lǐng)域,具體涉及計(jì)算機(jī)程序的調(diào)試技術(shù),更具體地涉及一種用于實(shí)現(xiàn)計(jì)算機(jī)程序的調(diào)試中所使用的觀察點(diǎn)(watchpoint)的方法和系統(tǒng)。
背景技術(shù)
:眾所周知,調(diào)試是軟件開(kāi)發(fā)中的一個(gè)重要階段.在該階段中,開(kāi)發(fā)人員要花費(fèi)大量時(shí)間并使用各種調(diào)試方法和技術(shù)以發(fā)現(xiàn)程序故障的根源并改正它們.觀察點(diǎn)(watchpoint)是調(diào)試過(guò)程中所使用的關(guān)鍵技術(shù)之一.觀察點(diǎn)是當(dāng)被調(diào)試程序的地址空間的指定部分被訪問(wèn)時(shí)呈現(xiàn)給調(diào)試者的通知.觀察點(diǎn)"觀察,,^f皮調(diào)試程序的存儲(chǔ)空間中的一地址范圍,并在發(fā)生訪問(wèn)該地址范圍的任何企圖時(shí)被觸發(fā),即停止被調(diào)試程序.開(kāi)發(fā)人員使用觀察點(diǎn)來(lái)監(jiān)視對(duì)程序中的指定變量或表達(dá)式的訪問(wèn),包括讀訪問(wèn)和寫訪問(wèn),以發(fā)現(xiàn)是否有任何非預(yù)期的情況發(fā)生.它可以暴露開(kāi)發(fā)過(guò)程中的很多嚴(yán)重的編程4晉誤.例如,對(duì)程序變量的非預(yù)期的訪問(wèn),以及與時(shí)序(timing)相關(guān)的程序錯(cuò)誤,如異步訪問(wèn)、多線程訪問(wèn)中的程序錯(cuò)誤等.在當(dāng)前的調(diào)試器中已存在對(duì)某些種類的觀察點(diǎn)的支持.然而,各現(xiàn)有技術(shù)都存在一些缺點(diǎn).第一種觀察點(diǎn)實(shí)現(xiàn)基于由處理器提供的硬件設(shè)施.這種實(shí)現(xiàn)的一種最直接方式是在處理器中提供特殊的用來(lái)指定開(kāi)始地址和行程的基/界寄存器。然后由處理器負(fù)責(zé)捕獲在該地址范圍中皿據(jù)的任何修改,并在發(fā)生寫入之前停止處理器.這種觀察點(diǎn)實(shí)現(xiàn)通常很快,但它依賴于處理器,因此不是一種通用的解決方案.不同的處理器以不同的方式支持觀察點(diǎn).一些處理器干脆不支持觀察點(diǎn).而且,硬件設(shè)施代價(jià)高昂,因?yàn)榭捎玫挠布Y源總是有限的.當(dāng)所有可用的硬件設(shè)施已被用盡時(shí),調(diào)試器不得不切換到觀察點(diǎn)的軟件實(shí)現(xiàn)。標(biāo)題為"WatchpointEngineforaPipelinedProcessor"的美國(guó)專利US6829701B2提出了一種專門針對(duì)多級(jí)流水線處理器的觀察點(diǎn)機(jī)制.這些觀察點(diǎn)可以監(jiān)視多級(jí)流水線上指令執(zhí)行效果的傳遞.它的實(shí)現(xiàn)是通過(guò)一些額外的、稱為觀察點(diǎn)引擎的集成電路來(lái)完成的.因此,該專利需要硬件提供額外支持,且依賴于特定的處理器,因此不是一種用于實(shí)現(xiàn)觀察點(diǎn)的通用的解決方案.在支持觀察點(diǎn)的軟件機(jī)制中,單步才莫擬是非常著名的。其工作原理如下如果設(shè)置有任何觀察點(diǎn),則程序?qū)尾綀?zhí)行.就是說(shuō),在被調(diào)試程序的每條機(jī)器指令被執(zhí)行之后,停止程序,并將控制給予調(diào)試器.然后調(diào)試器將評(píng)估所有^皮觀察的變量以查看它們是否已改變.如果有任何變量改變,則可知在該變量上發(fā)生了寫觀察點(diǎn)命中。該方法的優(yōu)點(diǎn)是它是通用的,是獨(dú)立于任何平臺(tái)的.但它很漫.在每條指令執(zhí)行之后,被調(diào)試程序?qū)⑼V梗⑶艺{(diào)試器將獲得控制.大多數(shù)這樣的上下文轉(zhuǎn)換將不會(huì)發(fā)現(xiàn)任何〗見(jiàn)察點(diǎn)命中.這些上下文轉(zhuǎn)換的代價(jià)是很高的.而且,該機(jī)制不能支持讀觀察點(diǎn),而讀觀察點(diǎn)也是很有用的.另一類觀察點(diǎn)機(jī)制是通過(guò)改變分頁(yè)機(jī)制.該機(jī)制的一個(gè)示例可參見(jiàn)2006年5月16日公布的標(biāo)題為"ComputerSystemwithWatchpointSuport"的美國(guó)專利US7047520B2.該方法是通過(guò)f務(wù)改系統(tǒng)頁(yè)面的屬性來(lái)完成的.具體地,如果用戶在一個(gè)變量(或地址)上設(shè)置一個(gè)觀察點(diǎn),包括該變量(或地址)的系統(tǒng)頁(yè)面的屬性會(huì)被修改.這樣當(dāng)該存儲(chǔ)器頁(yè)面被訪問(wèn)的時(shí)候,就會(huì)觸發(fā)一個(gè)頁(yè)面訪問(wèn)異常.在調(diào)試器截獲到這個(gè)頁(yè)面訪問(wèn)異常之后,調(diào)試器的一段新增代碼檢測(cè)該次訪問(wèn)是否的確是發(fā)生在要觀察的變量(或地址)上.如果是,就表明這個(gè)觀察點(diǎn)事件的確被觸發(fā)了,調(diào)試器將控制轉(zhuǎn)交給用戶;如果不是,就恢復(fù)正常的頁(yè)面操作,讓程序繼續(xù)向下執(zhí)行.與上述單步模擬方法相比,該方法效率更高.但它具有所有分頁(yè)方法所具有的缺點(diǎn)。首先,它監(jiān)視的是整個(gè)頁(yè)面,而頁(yè)面比用戶要監(jiān)視的變量大^艮多,這樣就會(huì)產(chǎn)生一些不必要的中斷,因而性能會(huì)受影響.其次,因?yàn)樵搶@枰薷谋徽{(diào)試程序的頁(yè)面屬性,這是需要內(nèi)核支持的;同時(shí)用戶空間的調(diào)試器需要自己去判斷產(chǎn)生的每一次異常中斷是否真的是發(fā)生在凈皮觀察的變量地址上.而且由于頁(yè)面訪問(wèn)是很頻繁的操作,額外的代碼會(huì)增加頁(yè)面管理的復(fù)雜度,頁(yè)面管理效率也會(huì)降低.下表概括了以上觀察點(diǎn)機(jī)制的優(yōu)點(diǎn)和缺點(diǎn)表l:可用觀察點(diǎn)機(jī)制概覽<table>tableseeoriginaldocumentpage9</column></row><table>顯然,在本領(lǐng)域中需要一種能夠克服上述現(xiàn)有的觀察點(diǎn)實(shí)現(xiàn)技術(shù)的缺點(diǎn)的、以通用和高效的方式實(shí)現(xiàn)觀察點(diǎn)的方法和系統(tǒng).
發(fā)明內(nèi)容本發(fā)明的基本思想在于擴(kuò)展編譯器以重用其數(shù)據(jù)流分析能力,從而得到任一程序變量的所有訪問(wèn)位置信息,然后在調(diào)試時(shí)在該變量的訪問(wèn)位置設(shè)置斷點(diǎn)來(lái)完成觀察點(diǎn)的功能.根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于實(shí)現(xiàn)在計(jì)算機(jī)程序的調(diào)試中使用的觀察點(diǎn)的方法,該方法包括以下步驟在該程序的編譯階段,通過(guò)數(shù)據(jù)流分析生成對(duì)該程序中各變量的訪問(wèn)位置信息;以及在該程序的調(diào)試階段,才艮據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn).根據(jù)本發(fā)明的另一個(gè)方面,提供了一種用于通過(guò)編譯器從源程序生成帶有可用于調(diào)試的該程序中各變量的訪問(wèn)位置信息的、該程序的二進(jìn)制代碼文件的方法,包括以下步驟才艮據(jù)對(duì)該程序的數(shù)據(jù)流分析的結(jié)果生成該程序中每個(gè)變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.根據(jù)本發(fā)明的又一個(gè)方面,提供了一種用于通過(guò)調(diào)試器在由上述方法生成的程序的二進(jìn)制代碼文件中設(shè)置和觸發(fā)觀察點(diǎn)的方法,該方法包括以下步驟讀取用戶指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;在該程序中、在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否^皮標(biāo)記為綁定到任何指定的程序變量;以及當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.根據(jù)本發(fā)明的再一個(gè)方面,提供了一種用于實(shí)現(xiàn)在計(jì)算機(jī)程序的調(diào)試中使用的觀察點(diǎn)的系統(tǒng),該系統(tǒng)包括在編譯器端的生成裝置,用于通過(guò)數(shù)據(jù)流分析生成對(duì)該程序中各變量的訪問(wèn)位置信息;以及在調(diào)試器端的實(shí)現(xiàn)裝置,用于根據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn).根據(jù)本發(fā)明的還一個(gè)方面,提供了一種編譯器,該編譯器用于從源程序生成帶有可用于調(diào)試的該程序中各變量的訪問(wèn)位置信息的、該程序的二進(jìn)制代碼文件,其特征在于包括生成模塊,用于根據(jù)對(duì)該程序的數(shù)據(jù)流分析的結(jié)果生成該程序中每個(gè)變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;更新模塊,用于在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及寫入二進(jìn)制代碼文件模塊,用于將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.根據(jù)本發(fā)明的進(jìn)一步的方面,提供了一種調(diào)試器,該調(diào)試器用于根據(jù)由上述編譯器所生成的、程序的二進(jìn)制代碼文件進(jìn)行調(diào)試,其特征在于包括讀取^莫塊,用于讀取用戶指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;設(shè)置模塊,用于在該程序中、在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;以及判斷模塊,用于當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否^皮標(biāo)記為綁定到任何指定的程序變量,并用于當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.此外,本發(fā)明還可體現(xiàn)為一種計(jì)算機(jī)可讀介質(zhì),在其上存儲(chǔ)有用于實(shí)現(xiàn)前面方法權(quán)利要求的任何方法的指令的計(jì)算機(jī)程序產(chǎn)品.本發(fā)明的技術(shù)方案可克服上述現(xiàn)有技術(shù)中的各種缺點(diǎn).簡(jiǎn)言之,它是通用的、高效的和獨(dú)立于處理器的.只要編譯器能夠?yàn)槊總€(gè)變量輸出所述訪問(wèn)信息,則調(diào)試器就可容易地使用該信息來(lái)監(jiān)視對(duì)變量的訪問(wèn)。它不需要任何低層的操作系統(tǒng)改變。它不需要任何硬件支持,并因此是獨(dú)立于硬件平臺(tái)的.它只會(huì)在設(shè)置了觀察點(diǎn)的變量將被訪問(wèn)之處停止程序的執(zhí)行,因此它比其他軟件實(shí)現(xiàn)方法快得多.它也可以某種方式容忍編譯器優(yōu)化.就是說(shuō),即使對(duì)這些變量訪問(wèn)有任何優(yōu)化(不管是指令再排序、寄存器分配、或任何其他優(yōu)化措施),只要編譯器可生成針對(duì)該變量的相應(yīng)的指令地址信息,則調(diào)試器將容易觀察它.結(jié)合附圖參考下面對(duì)根據(jù)本發(fā)明的優(yōu)選的但僅是說(shuō)明性的實(shí)施例的詳細(xì)說(shuō)明可更充分地理解本發(fā)明及其實(shí)施例.在附圖中圖l是示出了通常的編譯器工作過(guò)程的示意圖2是示出了根據(jù)本發(fā)明的實(shí)施例對(duì)現(xiàn)有的編譯器所作的改變的示意圖3是示出了根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法在編譯器端的過(guò)程的示意性流程圖4是示出了根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法在調(diào)試器端執(zhí)行的過(guò)程的示意性流程圖5是根據(jù)本發(fā)明的實(shí)施例所生成的每個(gè)變量的讀訪問(wèn)位置列表和寫訪問(wèn)位置列表的圖示;圖6是根據(jù)本發(fā)明的實(shí)施例的一個(gè)觀察點(diǎn)變量與為其在多個(gè)位置設(shè)置的斷點(diǎn)之間的對(duì)應(yīng)關(guān)系的圖示;以及圖7是示出了根據(jù)本發(fā)明的實(shí)施例用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)的框圖.具體實(shí)施例方式本發(fā)明包括對(duì)現(xiàn)有的編譯器以及調(diào)試器的改變.如本領(lǐng)域的技術(shù)人員所知的,編譯器用于將以高級(jí)語(yǔ)言編寫的源代碼轉(zhuǎn)換為可執(zhí)行的二進(jìn)制代碼,以生成可執(zhí)行程序.而調(diào)試器則用來(lái)檢測(cè)和調(diào)試通過(guò)編譯器生成的可執(zhí)行程序,以發(fā)現(xiàn)和改正程序中的錯(cuò)誤.調(diào)試器依賴于編譯器來(lái)良好地工作,因?yàn)榫幾g器生成的諸如源信息和行信息、調(diào)用幀(callframe)信息等可由調(diào)試器加以利用.編譯器和調(diào)試器常常位于同一個(gè)集成開(kāi)發(fā)環(huán)境(IDE)中,以方便程序的開(kāi)發(fā)和調(diào)試.當(dāng)然,兩者也可以是相互獨(dú)立的.本發(fā)明的核心思想是利用編譯器的數(shù)據(jù)流分析能力。如本領(lǐng)域的技術(shù)人員所知的,數(shù)據(jù)流分析是一種靜態(tài)分析技術(shù),它通過(guò)對(duì)計(jì)算機(jī)源程序代碼或其中間表示的分析自動(dòng)收集關(guān)于程序中的數(shù)據(jù)項(xiàng)之間的依賴性等信息.所收集的信息通??捎糜趯?duì)程序進(jìn)行優(yōu)化,因此大多數(shù)編譯器包括一個(gè)或多個(gè)數(shù)據(jù)流分析階段.數(shù)據(jù)流分析可提供關(guān)于程序如何操縱/訪問(wèn)其變量的全局信息。該信息對(duì)于使編譯器知道程序的數(shù)據(jù)訪問(wèn)方式是關(guān)鍵的,并因此廣泛地應(yīng)用于數(shù)據(jù)相關(guān)的編譯器優(yōu)化,例如死存儲(chǔ)(deadstore)消除、常量傳遞(constantpropagation)等.但該信息也可用于觀察點(diǎn)功能,因?yàn)橛^察點(diǎn)也與對(duì)程序變量的訪問(wèn)有關(guān).因此,調(diào)試器可以重用數(shù)據(jù)流分析的結(jié)果來(lái)支持觀察點(diǎn).為此,根據(jù)本發(fā)明的實(shí)施例,擴(kuò)展了通過(guò)數(shù)據(jù)流分析所生成的關(guān)于變量訪問(wèn)信息的數(shù)據(jù)結(jié)構(gòu)例如DU鏈(或UD鏈),以記錄對(duì)所有程序變量的所有訪問(wèn)(讀或?qū)?.如本領(lǐng)域的技術(shù)人員所知的,DU(或UD鏈)鏈由大多數(shù)編譯器的數(shù)據(jù)流分析模塊用來(lái)表示數(shù)據(jù)訪問(wèn)信息.它包括一變量用U.所述定義通常意味著向變量賦予某個(gè)值.根據(jù)本發(fā)明的實(shí)施例,在編譯器端根據(jù)數(shù)據(jù)流分析階段生成的每個(gè)變量的DU鏈(或UD鏈)為每個(gè)變量生成兩個(gè)集合,一個(gè)稱為讀訪問(wèn)集合,用于該變量的所有讀訪問(wèn)指令,而另一個(gè)稱為寫訪問(wèn)集合,用于該變量的所有寫訪問(wèn)指令.每個(gè)集合的成員是這些指令的地址.根據(jù)本發(fā)明的實(shí)施例,在調(diào)試器端讀取在編譯器端生成的每個(gè)變量的上述讀訪問(wèn)集合和寫訪問(wèn)集合,并在需要設(shè)置觀察點(diǎn)的變量的每個(gè)訪問(wèn)地址處設(shè)置斷點(diǎn),從而實(shí)現(xiàn)對(duì)該變量的觀察點(diǎn).下面詳細(xì)描述根據(jù)本發(fā)明的實(shí)施例對(duì)編譯器以及調(diào)試器所作的改變,以及根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法和系統(tǒng).根據(jù)本發(fā)明的實(shí)施例的在編譯器端的改變圖1示意性地示出了通常的編譯器工作過(guò)程.參照?qǐng)D1,編譯器用于將源代碼轉(zhuǎn)換為可執(zhí)行的二進(jìn)制代碼,該轉(zhuǎn)換過(guò)程通常包括若干階段或遍(pass).首先,編譯器需要執(zhí)行某些預(yù)處理,進(jìn)#^司法分析和句法分析,這被稱為前端(frontend).在這之后,將源代碼轉(zhuǎn)換為某種中間表示(IR),該中間表示將允許對(duì)程序進(jìn)行數(shù)據(jù)流分析和進(jìn)行重新安排.然后是代碼優(yōu)化階段,其用于根據(jù)數(shù)據(jù)流分析的結(jié)果等對(duì)中間表示的程序進(jìn)行優(yōu)化.最后是代碼生成階段,該階段將根據(jù)優(yōu)化后的中間表示生成可執(zhí)行的二進(jìn)制代碼.在所有這些階段中,都需要與符號(hào)表進(jìn)行交互.如本領(lǐng)域的4支術(shù)人員所知的,符號(hào)表是由編譯器所使用的一種數(shù)據(jù)結(jié)構(gòu),其中程序源代碼或其中間表示中的每個(gè)符號(hào)與諸如位置、類型和范圍級(jí)別等信息相關(guān)聯(lián).符號(hào)表中的"符號(hào)"可以指源代碼或其中間表示中的變量、函數(shù)或數(shù)據(jù)類型.符號(hào)表既可以是僅在編譯過(guò)程中使用并隨后丟棄的臨時(shí)性的數(shù)據(jù)結(jié)構(gòu),也可以嵌入到編譯過(guò)程的輸出例如二進(jìn)制代碼文件中,以便后來(lái)例如在調(diào)試中利用.此外,調(diào)試器也可根據(jù)二進(jìn)制代碼文件中的有關(guān)信息重新創(chuàng)建自己的符號(hào)表.圖2示意性地示出了根據(jù)本發(fā)明的實(shí)施例對(duì)現(xiàn)有的編譯器所作的改變.如圖所示,在現(xiàn)有編譯器的一些編譯階段中作出了一些修改,以便使編譯器支持觀察點(diǎn).第一項(xiàng)修改是在數(shù)據(jù)流分析中,第二項(xiàng)修改是在代碼生成中.同時(shí),優(yōu)選地,也需要擴(kuò)展符號(hào)表的結(jié)構(gòu)以包括關(guān)于每個(gè)變量的訪問(wèn)集合信息.最后,需要將這些訪問(wèn)集合信息輸出到結(jié)果二進(jìn)制代碼中.首先,考慮數(shù)據(jù)流分析階段,其中編譯器將為每個(gè)變量生成DU鏈信息.如本領(lǐng)域的技術(shù)人員所知的,變量的DU鏈將該變量的定義連接到對(duì)它的所有使用,其中定義對(duì)應(yīng)于寫操作,而使用對(duì)應(yīng)于讀操作.給定一個(gè)變量的所有DU鏈,則可知道對(duì)該變量所有可能的訪問(wèn).DU鏈的結(jié)構(gòu)可由一函數(shù)表示如下DU鏈(變量符號(hào),變量定義)->變量4吏用集合其中,變量定義或變量使用是其相應(yīng)IR語(yǔ)句的標(biāo)簽.根據(jù)本發(fā)明的實(shí)施例,在該階段的末端,添加一過(guò)程,該過(guò)程將變量的所有DU鏈轉(zhuǎn)換為兩個(gè)集合,一個(gè)為寫訪問(wèn)集合,其記錄該變量的所有定義;另一個(gè)為讀訪問(wèn)集合,其記錄該變量的所有使用.就是說(shuō),這兩個(gè)集合表示訪問(wèn)(讀或?qū)?指定變量的所有指令的地址.這兩個(gè)集合的結(jié)構(gòu)可由以下函數(shù)表示寫訪問(wèn)集合變量符號(hào)-〉對(duì)該變量的寫訪問(wèn)集合讀訪問(wèn)集合變量符號(hào)->對(duì)該變量的讀訪問(wèn)集合這兩個(gè)集合都可以實(shí)現(xiàn)為鏈表,并可被添加到符號(hào)表中,作為對(duì)符號(hào)表中變量條目的擴(kuò)展,如圖2中部所示.或者可選地,這兩個(gè)集合也可以添加到編譯過(guò)程中現(xiàn)有的其他數(shù)據(jù)結(jié)構(gòu)中,或作為單獨(dú)的數(shù)據(jù)結(jié)構(gòu)存在.此外,這兩個(gè)集合也可實(shí)現(xiàn)為不同于鏈表的其他數(shù)據(jù)結(jié)構(gòu)。例如,對(duì)于下面的這段代碼1a:=b+c2b:=a-c3c:=a-b4a:=b-c5c:=a-2b6b:=a-2c變量a的DU鏈有兩個(gè)(a,1)=(2,3)(a,4)=(5,6)經(jīng)過(guò)下面的偽代碼轉(zhuǎn)換后生成的讀訪問(wèn)集合和寫訪問(wèn)集合分別如下"a"的讀訪問(wèn)集合(2,3,5,6)"a"的寫訪問(wèn)集合(1,4)完成DU鏈到讀訪問(wèn)集合和寫訪問(wèn)集合的偽代碼例如可以表示如下for(alltheVariableSymbols)doinitializewriteset:Write_Set[Variable_Symbol=nullinitializereadset:Read—Set[Variable_Symbol=nulldonefor(alltheDU-Chains)dosplitdu-chain,getVariable—Symbol,Def一PlaceandSetof—Use—PlaceappendDef一PlaceintoWrite—Set[Variable—Symbol]for(eachmemberofSetof—Use—Place)doif(Use—PlaceisnotmemberofRead_Set[Variable_Symbol)appendUse—PlaceintoRead—Set[Variable—Symbol]endifdonedone在本發(fā)明的另一個(gè)實(shí)施例中,使用UD鏈而不是DU鏈來(lái)生成變量的讀訪問(wèn)集合和寫訪問(wèn)集合.例如對(duì)于上述同一段代碼,變量a的UD鏈有四個(gè)(a,2)=(1)(a,3)=(1)(a,5)=(4)(a,6)=(4)通過(guò)使用與上述轉(zhuǎn)換代碼類似的轉(zhuǎn)換代碼,得到同樣的讀訪問(wèn)集合和寫訪問(wèn)集合"a"的讀訪問(wèn)集合(2,3,5,6)"a"的寫訪問(wèn)集合(1,4)在代碼生成階段中,所有IR代碼將被轉(zhuǎn)換為機(jī)器指令.用于每個(gè)IR代碼的標(biāo)簽(label)也將被轉(zhuǎn)換為最終的指令地址(絕對(duì)地址或可重定位地址).此時(shí),編譯器可更新符號(hào)表中的訪問(wèn)集合,即以二進(jìn)制地址信息取代訪問(wèn)集合中的IR標(biāo)簽.最后一個(gè)步驟是將更新的訪問(wèn)集合輸出到結(jié)果二進(jìn)制代碼的某數(shù)據(jù)段中。該數(shù)據(jù)段可以是一額外的專用段,如圖2所示.或者,也可以將更新的訪問(wèn)集合插入到某個(gè)現(xiàn)有段中.例如,ELF(可執(zhí)行和鏈接格式)使用名稱為.debuginfo的段來(lái)記錄每個(gè)變量的信息.每個(gè)變量將被記錄為帶有某些屬性例如地址、類型、長(zhǎng)度等的標(biāo)記(tag).可將這兩個(gè)集合附加作為標(biāo)記的兩個(gè)額外屬性.這樣,在結(jié)果二進(jìn)制代碼中,將存在對(duì)每個(gè)變量的訪問(wèn)集合信息.調(diào)試器可使用所述訪問(wèn)集合信息來(lái)設(shè)置觀察點(diǎn).才艮據(jù)本發(fā)明實(shí)施例在調(diào)試器端的改變對(duì)于調(diào)試器,首先需要添加用于讀取所述訪問(wèn)集合的額外的讀取器,如圖4的程序加載階段所示.因此,調(diào)試器除了知道變量的類型、地址和長(zhǎng)度信息外,還可知道程序中何處將訪問(wèn)這些變量.該信息可被鏈接到由調(diào)試器創(chuàng)建的符號(hào)表中.當(dāng)調(diào)試器被命4^殳置觀察點(diǎn)(讀觀察點(diǎn)或?qū)懹^察點(diǎn))時(shí),它可從符號(hào)表讀糾目應(yīng)的訪問(wèn)位置集合,即訪問(wèn)位置列表.然后,只需要在列表中的所有這些位置上"&置斷點(diǎn),并將這些斷點(diǎn)標(biāo)記為綁定到指定變量.以這種方式,將一觀察點(diǎn)轉(zhuǎn)化為一個(gè)或多個(gè)斷點(diǎn).如本領(lǐng)域的技術(shù)人員所知的,斷點(diǎn)是在程序開(kāi)發(fā)過(guò)程中為了調(diào)試目的放置于程序中的有意的停止或暫停位置.斷點(diǎn)的命中引起中斷,使得程序員能夠檢查程序是否正確運(yùn)行.它是所有調(diào)試器中的最基本功能,同時(shí)也最容易和高效地實(shí)現(xiàn).根據(jù)本發(fā)明的實(shí)舉例,當(dāng)調(diào)試器檢測(cè)到一斷點(diǎn)被命中時(shí),它可從其自己維護(hù)的斷點(diǎn)列表中讀取斷點(diǎn)號(hào),從而知道該斷點(diǎn)是否被標(biāo)記為綁定到任何變量.如果是,則該斷點(diǎn)命中實(shí)際上是一觀察點(diǎn)命中.調(diào)試器可將控制返回到用戶,并通知他指定變量上的觀察點(diǎn)被命中.下面詳細(xì)描述根據(jù)本發(fā)明的實(shí)施例的用于實(shí)施觀察點(diǎn)的方法的各步驟.根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法圖3示意性地示出了根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法在編譯器端的過(guò)程的流程.如圖所示,在編譯過(guò)程的數(shù)據(jù)流分析階段,在步驟301,將由數(shù)據(jù)流分析所生成的、待調(diào)試程序的每個(gè)變量的DU鏈轉(zhuǎn)換為對(duì)該變量的讀訪問(wèn)集合和寫訪問(wèn)集合.所述讀訪問(wèn)集合和寫訪問(wèn)集合的成員可分別是對(duì)該變量的讀指令和寫指令的中間表示的標(biāo)簽.所述轉(zhuǎn)換可采用前述示例中的算法進(jìn)行,也可采用本領(lǐng)域的技術(shù)人員可想到的任何其他算法進(jìn)行.此外,也可由數(shù)據(jù)流分析所生成的每個(gè)變量的UD鏈或可表示每個(gè)變量的訪問(wèn)信息的其他可能的數(shù)據(jù)結(jié)構(gòu)來(lái)生成該變量的讀訪問(wèn)集合和寫訪問(wèn)集合.在步驟302,將所述中間表示的每個(gè)變量的讀訪問(wèn)集合和寫訪問(wèn)集合寫入符號(hào)表,作為該符號(hào)表的一部分.這可以通過(guò)擴(kuò)展現(xiàn)有的符號(hào)表的數(shù)據(jù)結(jié)構(gòu)來(lái)完成。在現(xiàn)有的符號(hào)表中,每一個(gè)符號(hào)都有一個(gè)字段表明其類型,不同類型的符號(hào)可以有其自己的附加屬性.可以在變量類的符號(hào)中增加一個(gè)訪問(wèn)集的附加屬性.在從步驟301得到訪問(wèn)集合信息之后,直接將其寫入即可.在本發(fā)明的其他實(shí)施例中,所述讀訪問(wèn)集合和寫訪問(wèn)集合也可以存儲(chǔ)為單獨(dú)的數(shù)據(jù)結(jié)構(gòu)例如普通的M,或者被寫入數(shù)據(jù)流分析中所生成的其他數(shù)據(jù)結(jié)構(gòu)中.不管怎樣,只要每個(gè)變量的讀訪問(wèn)集合和寫訪問(wèn)集合是與該變量的符號(hào)相關(guān)聯(lián)地存儲(chǔ)的,則這些變化都處于本發(fā)明的范圍之內(nèi).這樣,根據(jù)本發(fā)明的一實(shí)施例,就得到了具有訪問(wèn)集合擴(kuò)展的符號(hào)表或其他數(shù)據(jù)結(jié)構(gòu).在編譯過(guò)程中的代碼生成階段,編譯器將該程序的中間表示的語(yǔ)句映射為二進(jìn)制代碼,同時(shí)符號(hào)表中的每個(gè)IR表示的標(biāo)簽也將被轉(zhuǎn)換為二進(jìn)制的指令地址.于是,在步驟303,以相應(yīng)的二進(jìn)制地址更新符號(hào)表或其他數(shù)據(jù)結(jié)構(gòu)中的每個(gè)變量的訪問(wèn)集合中的、代表該變量的讀訪問(wèn)或?qū)懺L問(wèn)指令的IR標(biāo)簽.在步驟304,將所述更新后的每個(gè)變量的訪問(wèn)集合寫入最終的二進(jìn)制代碼.這既可以如圖2中所示的那樣,在所述二進(jìn)制代碼中增加一個(gè)額外的訪問(wèn)集合段,將每個(gè)變量的所述訪問(wèn)集合寫入該訪問(wèn)集合段;也可以將每個(gè)變量的所述訪問(wèn)集合寫入二進(jìn)制代碼中現(xiàn)有的符號(hào)表段中,作為符號(hào)表段中每個(gè)相應(yīng)變量符號(hào)的附加屬性;或者,也可以將每個(gè)變量的所述訪問(wèn)集合寫入該程序的二進(jìn)制文件之外的文件中,該文件將在調(diào)試階段作為附加文件提供給調(diào)試器.不管怎樣,每個(gè)變量的訪問(wèn)集合是與該變量的符號(hào)鏈接在一起的.由此,根據(jù)本發(fā)明的實(shí)施例,得到了該程序的二進(jìn)制代碼文件,以及所包含或附加的每個(gè)變量的訪問(wèn)集合.所述二進(jìn)制代碼文件和每個(gè)變量的訪問(wèn)集合可被提供給調(diào)試器,由調(diào)試器對(duì)該程序進(jìn)行調(diào)試,以及根據(jù)本發(fā)明的方法設(shè)置觀察點(diǎn).應(yīng)注意的是,以上描述僅是示例性的,而不應(yīng)被理解為對(duì)本發(fā)明的限制.可對(duì)上述過(guò)程進(jìn)行多種改變,例如對(duì)一些步驟可進(jìn)行去除、添加、修改、合并、細(xì)分、改變執(zhí)行順序、或并行執(zhí)行等,而不脫離本發(fā)明的精神和范圍.例如,可考慮不通過(guò)程序的中間表示進(jìn)行數(shù)據(jù)流分析,而是直接對(duì)源程序進(jìn)行數(shù)據(jù)流分析,來(lái)獲得每個(gè)變量的所述DU鏈或UD鏈以及其讀訪問(wèn)集合和寫訪問(wèn)集合.只要能夠根據(jù)數(shù)據(jù)流分析結(jié)果生成每個(gè)變量的訪問(wèn)位置信息,則所有這些變化都處于本發(fā)明的范圍之內(nèi).圖4示意性地示出了根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法在調(diào)試器端執(zhí)4于的過(guò)程的流程.如圖所示,在調(diào)試器的程序加載階段,在步驟401,由訪問(wèn)集合位置讀舉4莫塊讀取包含或附加于程序的二進(jìn)制代碼文件的、由本發(fā)明的用于實(shí)現(xiàn)觀察點(diǎn)的方法在上述編譯器端的過(guò)程所生成的程序中每個(gè)變量的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合,即每個(gè)變量的讀訪問(wèn)位置列表和寫訪問(wèn)位置列表.圖5圖示了每個(gè)變量的讀訪問(wèn)位置列表和寫訪問(wèn)位置列表.可將所述每個(gè)變量的讀訪問(wèn)位置列表和寫訪問(wèn)位置列表存放于調(diào)試器所建立的符號(hào)表中,或?qū)⑵浯娣旁谡{(diào)試器的現(xiàn)有的其他數(shù)據(jù)結(jié)構(gòu)中,或?qū)⑵鋯为?dú)存放.只要保持每個(gè)變量與其讀訪問(wèn)位置列表和寫訪問(wèn)位置列表之間的對(duì)應(yīng)關(guān)系,則這些變化都處于本發(fā)明的范圍之內(nèi).此外,在本發(fā)明的另一實(shí)施例中,在調(diào)試器的程序加載階段,沒(méi)有單獨(dú)的用于從程序的二進(jìn)制代碼文件讀取所述每個(gè)變量的訪問(wèn)位置集合的步驟401,就是說(shuō)在調(diào)試器的程序加載階段,僅如正常情況下那樣,讀取帶有所述每個(gè)變量的訪問(wèn)集合的整個(gè)二進(jìn)制代碼文件,而由下述步驟402從中讀取用戶指定變量的訪問(wèn)位置集合.當(dāng)程序加載過(guò)程完成后,在用戶命令處理階段,在步驟402,當(dāng)用戶在某個(gè)變量上設(shè)置觀察點(diǎn)時(shí),根據(jù)用戶所設(shè)置的要設(shè)置觀察點(diǎn)的變量,從步驟401所生成的所述讀訪問(wèn)位置列表和寫訪問(wèn)位置列表中讀取該變量的訪問(wèn)位置列表.或者,在沒(méi)有單獨(dú)的步驟401的情況下,可從已加載的二進(jìn)制代碼文件中讀取該變量的訪問(wèn)位置列表.另外,在用戶命令僅設(shè)置變量的讀觀察點(diǎn)或僅設(shè)置變量的寫觀察點(diǎn)的情況下,在步驟402,可僅讀取該變量的讀訪問(wèn)位置列表或僅讀取該變量的寫訪問(wèn)位置列表.在步驟403,根據(jù)該變量的訪問(wèn)位置列表中的每個(gè)位置,在程序中的該位置處設(shè)置一斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到該變量。圖6示意性地示出了一個(gè)觀察點(diǎn)變量與為其在多個(gè)位置i殳置的斷點(diǎn)之間的對(duì)應(yīng)關(guān)系.可采用本領(lǐng)域的技術(shù)人員可設(shè)想的任何一種方式將一斷點(diǎn)標(biāo)記為綁定到一變量,例如通過(guò)維護(hù)一個(gè)反映斷點(diǎn)與變量之間的對(duì)應(yīng)關(guān)系的表等.另外,在用戶命令僅設(shè)置變量的讀觀察點(diǎn)或僅設(shè)置變量的寫觀察點(diǎn)的情況下,在步驟403,可僅在所述讀訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處或所述寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置一斷點(diǎn),并設(shè)置一個(gè)標(biāo)記把該斷點(diǎn)綁定到該變量上.當(dāng)程序已如上所述設(shè)置了多個(gè)斷點(diǎn)以及可能設(shè)置了其他普通斷點(diǎn)之后,執(zhí)行該程序,從而進(jìn)入事件處理階段.如果在程序執(zhí)行過(guò)程中,調(diào)試器檢測(cè)到一斷點(diǎn)被命中,則它首先確定該斷點(diǎn)的斷點(diǎn)號(hào),并且,根據(jù)本發(fā)明的一實(shí)施例,在步驟404,判斷該斷點(diǎn)是否被標(biāo)記為綁定到一變量,如通過(guò)查找上述反映斷點(diǎn)與變量之間的對(duì)應(yīng)關(guān)系的表等.如果在步驟404判斷該斷點(diǎn)被標(biāo)記為綁定到一變量,則在步驟405,將控制返回給用戶,并通知其該變量上的觀察點(diǎn)被命中,以便由用戶查看程序的執(zhí)行.否則,在步驟406中對(duì)該斷點(diǎn)進(jìn)行正常處理.應(yīng)注意的是,以上描述僅是示例性的,而不應(yīng)被理解為對(duì)本發(fā)明的限制??蓪?duì)上述過(guò)程進(jìn)行多種改變,例如對(duì)一些步驟可進(jìn)行去除、添加、修改、合并、細(xì)分、改變執(zhí)行順序、或并行執(zhí)行等,而不背離本發(fā)明的精神和范圍.只要能夠通過(guò)根據(jù)在編譯階段生成的程序變量的訪問(wèn)位置信息設(shè)置斷點(diǎn)來(lái)實(shí)現(xiàn)觀察點(diǎn),則所有這些變化都處于本發(fā)明的范圍之內(nèi).在本發(fā)明的另一個(gè)方面,還提供了一種用于通過(guò)編譯器從源程序生成帶有可用于調(diào)試的該程序中各變量的訪問(wèn)位置信息的、該程序的二進(jìn)制代碼文件的方法,該方法包括以下步驟根據(jù)對(duì)該程序的數(shù)據(jù)流分析的結(jié)果生成該程序中每個(gè)變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合,例如,將該程序的每個(gè)變量的、中間表示的DU鏈轉(zhuǎn)換為該變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.對(duì)該方法中各步驟的詳細(xì)描述和圖示請(qǐng)參見(jiàn)圖3中所示的根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法在編譯器端的各步驟的圖示和以上相應(yīng)的詳細(xì)描述.在本發(fā)明的另一個(gè)方面,還提供了一種用于通過(guò)調(diào)試器在通過(guò)以上方法生成的程序的二進(jìn)制代碼文件中設(shè)置和觸發(fā)觀察點(diǎn)的方法,該方法包括以下步驟讀取用戶指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處"&置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否被標(biāo)記為綁定到任何指定的程序變量;以及當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.對(duì)該方法中各步驟細(xì)描述和圖示請(qǐng)參見(jiàn)圖4中所示的根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的方法在調(diào)試器端的各步驟的圖示和以上相應(yīng)的詳細(xì)描述.下面詳細(xì)描述根據(jù)本發(fā)明的實(shí)施例的用于實(shí)施觀察點(diǎn)的系統(tǒng)的組成.根據(jù)本發(fā)明的實(shí)施例用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)圖7示出了根據(jù)本發(fā)明的實(shí)施例用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng).如圖所示,該用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)700通過(guò)編譯器710和調(diào)試器720實(shí)現(xiàn),即系統(tǒng)700包括在編譯器710中實(shí)現(xiàn)的部分和在調(diào)試器720中實(shí)現(xiàn)的部分.在圖7中,為簡(jiǎn)明起見(jiàn),編譯器710和調(diào)試器720中與本發(fā)明無(wú)關(guān)的各模塊未被示出.如圖所示,在編譯器710端,源程序被輸入之后,經(jīng)過(guò)編譯器的前端處理(未示出)生成程序的中間表示.然后,對(duì)該程序的中間表示進(jìn)行數(shù)據(jù)流分析,以便對(duì)程序進(jìn)行優(yōu)化.通過(guò)數(shù)據(jù)流分析生成了程序中每個(gè)變量的DU鏈(或UD鏈).然后經(jīng)過(guò)根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)700在編譯器710端的各模塊的處理,最后生成該程序的帶有每個(gè)程序變量的訪問(wèn)位置二進(jìn)制代碼文件,以供調(diào)試器720進(jìn)行調(diào)試.如圖所示,根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)700在編譯器710端包括轉(zhuǎn)換^^莫塊711,用于將程序的每個(gè)變量的、中間表示的DU鏈轉(zhuǎn)換為該變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;寫入符號(hào)表模塊712,用于將所述中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合寫入符號(hào)表;更新模塊713,用于在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及寫入二進(jìn)制代碼文件模塊714,用于將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.其中,所述轉(zhuǎn)換模塊711可從現(xiàn)有的編譯器710的數(shù)據(jù)流分析才莫塊接收關(guān)于變量訪問(wèn)信息的數(shù)據(jù)結(jié)構(gòu)例如DU鏈或UD鏈.該模塊可以是現(xiàn)有的數(shù)據(jù)流分析模塊的擴(kuò)展,也可以是現(xiàn)有的數(shù)據(jù)流分析模塊之外的單獨(dú)的模塊.所述寫入符號(hào)表模塊712可從轉(zhuǎn)換模塊711接收所生成的每個(gè)變量的讀訪問(wèn)集合和寫訪問(wèn)集合,并將其寫入符號(hào)表,作為符號(hào)表的擴(kuò)展.該寫入符號(hào)表才莫塊712也可將所述每個(gè)變量的讀訪問(wèn)集合和寫訪問(wèn)集合寫入符號(hào)表之外的別處.該寫入符號(hào)表模塊712可以是現(xiàn)有的數(shù)據(jù)流分析模塊的擴(kuò)展,也可以是現(xiàn)有的數(shù)據(jù)流分析模塊之外的單獨(dú)的模塊.所述更新模塊713可以是現(xiàn)有的編譯器710的代碼生成模塊的擴(kuò)展,也可以是現(xiàn)有的代碼生成模塊之外的單獨(dú)的模塊.它可將存儲(chǔ)在符號(hào)表或別的數(shù)據(jù)結(jié)構(gòu)中所述每個(gè)變量的讀訪問(wèn)集合和寫訪問(wèn)集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.所述寫入二進(jìn)制代碼文件模塊714可以是現(xiàn)有的編譯器710的代碼生成模塊的擴(kuò)展,也可以是現(xiàn)有的代碼生成模塊之外的單獨(dú)的模塊.它可將所述更新的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入程序的二進(jìn)制代碼文件中,或者將其寫入單獨(dú)的附加文件中,以供調(diào)試器使用.當(dāng)將所述訪問(wèn)位置集合寫入程序的二進(jìn)制代碼文件中時(shí),該寫入二進(jìn)制代碼文件模塊714可以將其寫入該二進(jìn)制代碼文件中的符號(hào)表段,作為對(duì)符號(hào)表段的擴(kuò)展,也可以將其寫入一個(gè)單獨(dú)的段中。如圖所示,才艮據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)700在調(diào)試器端720包括讀取模塊A721,用于在程序加載時(shí)從程序的二進(jìn)制代碼文件中讀取所述每個(gè)程序變量的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;讀取模塊B722,用于根據(jù)用戶設(shè)置觀察點(diǎn)的命令和所指定的要在其上設(shè)置觀察點(diǎn)的變量從所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合讀取該變量的相應(yīng)讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;設(shè)置模塊723,用于在所述指定的程序變量的所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述程序變量;判斷^f莫塊724,用于當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否祐:標(biāo)記為綁定到對(duì)任何指定的程序變量的訪問(wèn);以及通知模塊725,用于當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)^皮命中.其中,所述讀W^塊A721可附屬于調(diào)試器的二進(jìn)制程序加栽模塊,它可以是該二進(jìn)制程序加載模塊的一部分,用于讀取程序的二進(jìn)制代碼文件中的所述每個(gè)變量的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;也可以是該二進(jìn)制程序加載模塊之外的單獨(dú)的文件加栽模塊,用于讀取存放于附加文件中的所述每個(gè)變量的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.所述讀W^莫塊A721的功能也可以完全由現(xiàn)有的二進(jìn)制程序加栽模塊實(shí)現(xiàn),就是說(shuō),現(xiàn)有的二進(jìn)制程序加載模塊可加載包括所述每個(gè)變量的訪問(wèn)位置集合的整個(gè)二進(jìn)制代碼文件,不去識(shí)別其中的所述每個(gè)變量的訪問(wèn)位置集合,而由下述讀取才莫塊B722模塊從已加載的二進(jìn)制代碼文件中讀取所述每個(gè)變量的訪問(wèn)位置集合.這樣,在本發(fā)明的系統(tǒng)700中可以沒(méi)有單獨(dú)的讀取模塊A721.所述讀^^莫塊B722可附屬于調(diào)試器的用戶命令處理模塊,用于處理設(shè)置變量的觀察點(diǎn)的命令,并根據(jù)變量名讀出該變量相應(yīng)的訪問(wèn)位置集合.該讀取模塊B722可以是對(duì)調(diào)試器的現(xiàn)有的用戶命令處理模塊的擴(kuò)展,成為該用戶命令處理模塊的一部分;也可以是調(diào)試器的現(xiàn)有的用戶命令處理模塊之外的單獨(dú)的模塊。此外,該讀取模塊B722既可以從由所述讀,塊A721所獲得的所述每個(gè)程序變量的訪問(wèn)位置集合中讀取用戶所指定的變量的訪問(wèn)位置集合,也可以在不存在所述讀^^莫塊A721的情況下,直接從該程序的已加載的二進(jìn)制代碼文件中讀取其中的所指定變量的訪問(wèn)位置集合.另外,在用戶指令僅設(shè)置變量的讀觀察點(diǎn)或僅設(shè)置變量的寫觀察點(diǎn)的情況下,所述讀Wt塊B722可僅讀取該變量的讀訪問(wèn)位置集合或僅讀取該變量的寫訪問(wèn)位置集合.所述設(shè)置模塊723可附屬于調(diào)試器的用戶命令處理模塊,成為其一部分,也可以是單獨(dú)的模塊.該設(shè)置模塊723根據(jù)所述讀取模塊B722所讀取的所指定變量的訪問(wèn)位置集合,在所述訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置一斷點(diǎn),并設(shè)置一個(gè)標(biāo)記把該斷點(diǎn)綁定到該變量上.該設(shè)置纟莫塊723可采用本領(lǐng)域的技術(shù)人員可設(shè)想的任何一種方式將一斷點(diǎn)標(biāo)記為綁定到一變量,例如通過(guò)維護(hù)一個(gè)反映斷點(diǎn)與變量之間的對(duì)應(yīng)關(guān)系的表等.另外,在用戶指令僅設(shè)置變量的讀觀察點(diǎn)或僅設(shè)置變量的寫觀察點(diǎn)的情況下,所述設(shè)置模塊723可僅在所述讀訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處或所述寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置一斷點(diǎn),并設(shè)置一個(gè)標(biāo)記把該斷點(diǎn)綁定到該變量上.所述讀取漠塊B722也可以與所述設(shè)置模塊723合并為單個(gè)用于處理用戶的設(shè)置觀察點(diǎn)命令的模塊.所述判斷模塊724是調(diào)試器的事件處理模塊的一部分,更具體地,是斷點(diǎn)事件處理模塊的一部分.它可通過(guò)修改現(xiàn)有的調(diào)試器的事件處理模塊來(lái)實(shí)現(xiàn),也可以通過(guò)附加到現(xiàn)有的調(diào)試器的事件處理模塊上來(lái)實(shí)現(xiàn).當(dāng)檢測(cè)到斷點(diǎn)命中事件后,該判斷模塊724首先根據(jù)斷點(diǎn)地址找出該斷點(diǎn)對(duì)應(yīng)的號(hào)碼及其他相關(guān)信息,并例如通過(guò)所述反映斷點(diǎn)與變量之間的對(duì)應(yīng)關(guān)系的表判斷該斷點(diǎn)是否被綁定到一變量,以及4皮綁定到哪個(gè)變量,并當(dāng)該判斷為是時(shí),將控制返回給用戶,并通知其該變量上的觀察點(diǎn)被命中.應(yīng)當(dāng)注意的是,以上對(duì)根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)的描述僅是示例性和說(shuō)明性的,而不應(yīng)被理解為對(duì)本發(fā)明的限制.一些模塊可以被去除、修改、替換、添加、合并、拆分、改變連接關(guān)系等,只要這些模塊的組合能夠用來(lái)根據(jù)數(shù)據(jù)流分析的結(jié)果實(shí)現(xiàn)觀察點(diǎn),則這些變化都處于本發(fā)明的范圍之內(nèi).例如,所述轉(zhuǎn)換才莫塊711和寫入符號(hào)表模塊722可以合并為一個(gè)模塊,該模塊用于將程序中每個(gè)變量的DU鏈(或UD鏈)轉(zhuǎn)換為該變量的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合,并將所述訪問(wèn)指令集合寫入符號(hào)表.所述更新模塊713和寫入二進(jìn)制代碼模塊714也可合并為一個(gè)模塊,該模塊用于將中間表示的每個(gè)變量的所述訪問(wèn)指令集合更新為二進(jìn)制的該變量的訪問(wèn)位置集合,并將該訪問(wèn)位置集合寫入程序的二進(jìn)制代碼文件或一單獨(dú)的文件.所述讀取裝置A721和讀取裝置B722也可以合并為一個(gè)模塊,該模塊用于讀取用戶指定變量的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合。此夕卜,所述各模塊的劃分和命名僅是為了敘述和命名的方便,而不應(yīng)理解為對(duì)本發(fā)明的限制.例如,所述在編譯器端的各模塊可4皮共同稱為生成裝置,該裝置用于通過(guò)數(shù)據(jù)流分析生成對(duì)該程序中各變量的訪問(wèn)位置信息;而所述在調(diào)試器端的各模塊可被共同稱為實(shí)現(xiàn)裝置,該裝置用于根據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn).在本發(fā)明的另一個(gè)方面,還提供了一種編譯器,該編譯器用于從源程序生成帶有可用于調(diào)試的該程序中各變量的訪問(wèn)位置信息的、該程序的二進(jìn)制代碼文件。該編譯器的特征在于包括轉(zhuǎn)換模塊,用于根據(jù)對(duì)該程序的數(shù)據(jù)流分析的結(jié)果生成該程序中每個(gè)變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合,例如將程序的每個(gè)變量的、中間表示的DU鏈或UD鏈轉(zhuǎn)換為該變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;更新模塊,用于在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及寫入二進(jìn)制代碼文件才莫塊,用于將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.對(duì)該編譯器中各模塊的詳細(xì)描述和圖示請(qǐng)參見(jiàn)圖7中所示的根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)700中編譯器端的各模塊的圖示和以上相應(yīng)的詳細(xì)描述.在本發(fā)明的又一個(gè)方面,還提供了一種調(diào)試器,該調(diào)試器用于才艮據(jù)由上述編譯器所生成的、程序的二進(jìn)制代碼文件進(jìn)行調(diào)試,該調(diào)試器的特征在于包括讀取4莫塊,用于讀取指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;設(shè)置模塊,用于在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;以及判斷模塊,用于當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否^皮標(biāo)記為綁定到任何指定的程序變量,并用于當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.對(duì)該調(diào)試器中各模塊的詳細(xì)描述和圖示請(qǐng)參見(jiàn)圖7中所示的根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)觀察點(diǎn)的系統(tǒng)700中調(diào)試器端的各模塊的圖示和以上相應(yīng)的詳細(xì)描述.以上描述了根據(jù)本發(fā)明的一種新的觀察點(diǎn)實(shí)現(xiàn),它是通用的、更高效的和獨(dú)立于平臺(tái)的.它的成本也很低.所需要的改變主要在編譯器端.只需要重用現(xiàn)有的DU鏈信息,將該信息轉(zhuǎn)換為訪問(wèn)集合,并將訪問(wèn)集合輸出到結(jié)果二進(jìn)制代碼中.調(diào)試器也可^f艮容易地處理該額外信息.本發(fā)明可以硬件、軟件、或硬件與軟件的結(jié)合的方式實(shí)現(xiàn)。本發(fā)明可以集中的方式在一個(gè)計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn),或以分布方式實(shí)現(xiàn),在這種分布方式中,不同的部件分布在若干互連的計(jì)算機(jī)系統(tǒng)中。適于執(zhí)行本文中描述的各方法的任何計(jì)算機(jī)系統(tǒng)或其它裝置都是合適的.一種典型的硬件和軟件的組合可以是帶有計(jì)算才A4呈序的通用計(jì)算機(jī)系統(tǒng),當(dāng)該計(jì)算^4呈序被加載和執(zhí)行時(shí),控制該計(jì)算機(jī)系統(tǒng)而使其執(zhí)行本文中描述的方式.本發(fā)明也可體現(xiàn)在計(jì)算機(jī)程序產(chǎn)品中,該程序產(chǎn)品包含使能實(shí)現(xiàn)本文中描述的方法的所有特征,并且當(dāng)其被加載到計(jì)算機(jī)系統(tǒng)中時(shí),能夠執(zhí)行這些方法.該程序產(chǎn)品的程序規(guī)定了這里介紹的本發(fā)明的實(shí)施例(包括方法)的功能并可被包含在多種信號(hào)承栽介質(zhì)中.典型的信號(hào)承栽介質(zhì)包括但不限于(i)永久存儲(chǔ)在不可寫存儲(chǔ)介質(zhì)(例如計(jì)算機(jī)中的只讀存儲(chǔ)器裝置,例如可由CD-ROM驅(qū)動(dòng)器讀取的CD-ROM盤)上的信息;(ii)存儲(chǔ)在可寫存儲(chǔ)介質(zhì)(例如軟盤驅(qū)動(dòng)器中的軟盤或磁盤驅(qū)動(dòng)器)上的可更改的信息;以及(iii)通過(guò)例如包括無(wú)線通信在內(nèi)的計(jì)算機(jī)或電話網(wǎng)絡(luò)等通信介質(zhì)傳送給計(jì)算機(jī)的信息.以上公開(kāi)的特定的實(shí)施例只是示意性的,因?yàn)楸景l(fā)明可以不同M目當(dāng)?shù)姆绞?皮#^改和實(shí)施,這些方式對(duì)于得益于這里的教導(dǎo)的本領(lǐng)域中的那些技術(shù)人員是顯而易見(jiàn)的.進(jìn)一步地,除了下面權(quán)利要求中所記載的以外,本文中所示的流程和結(jié)構(gòu)上的細(xì)節(jié)并非旨在有其他限制.因此顯然以上所述的特定的實(shí)施例可被改變或修改,且所有這些變化都被認(rèn)為在權(quán)利要求中所定義的本發(fā)明的范圍內(nèi).權(quán)利要求1.一種用于實(shí)現(xiàn)在計(jì)算機(jī)程序的調(diào)試中使用的觀察點(diǎn)的方法,該方法包括以下步驟在該程序的編譯階段,通過(guò)數(shù)據(jù)流分析生成對(duì)該程序中各變量的訪問(wèn)位置信息;以及在該程序的調(diào)試階段,根據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn)。2.根據(jù)權(quán)利要求1的方法,其中對(duì)程序變量的所述訪問(wèn)位置信息包括對(duì)該程序變量的訪問(wèn)位置集合,且所述實(shí)現(xiàn)步驟包括在該程序變量的訪問(wèn)位置集合的每一訪問(wèn)位置處設(shè)置斷點(diǎn).3.根據(jù)權(quán)利要求2的方法,其中所述訪問(wèn)位置集合包括讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.4.根據(jù)權(quán)利要求3的方法,其中所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合是從程序變量的定義使用鏈或使用定義鏈生成的.5.根據(jù)權(quán)利要求4的方法,其中所述生成步驟包括將該程序的每個(gè)變量的、中間表示的定義使用鏈或使用定義鏈轉(zhuǎn)換為該變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;以及在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.6.根據(jù)權(quán)利要求5的方法,其中所述生成步驟還包括將所述中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合寫入符號(hào)表.7.根據(jù)權(quán)利要求5的方法,其中所述生成步驟還包括將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.8.根據(jù)權(quán)利要求6的方法,其中將所述中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合寫入符號(hào)表的所述步驟將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合作為所述符號(hào)表中相應(yīng)變量條目的擴(kuò)展寫入所述符號(hào)表.9.根據(jù)權(quán)利要求5的方法,其中在該程序的調(diào)試階段、根據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn)的步驟包括讀取所述指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否被標(biāo)記為綁定到任何指定的程序變量;以及當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.10.—種用于通過(guò)編譯器從源程序生成帶有可用于調(diào)試的該程序中各變量的訪問(wèn)位置信息的、該程序的二進(jìn)制代碼文件的方法,包括以下步驟根據(jù)對(duì)該程序的數(shù)據(jù)流分析的結(jié)果生成該程序中每個(gè)變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件。11.一種用于通過(guò)調(diào)試器在由權(quán)利要求10的方法生成的程序的二進(jìn)制代碼文件中設(shè)置和觸發(fā)觀察點(diǎn)的方法,包括以下步驟讀取用戶指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否被標(biāo)記為綁定到任何指定的程序變量;以及當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.12.—種用于實(shí)現(xiàn)在計(jì)算機(jī)程序的調(diào)試中使用的觀察點(diǎn)的系統(tǒng),該系統(tǒng)包括在編譯器端的生成裝置,用于通過(guò)數(shù)據(jù)流分析生成對(duì)該程序中各變量的訪問(wèn)位置信息;以及在調(diào)試器端的實(shí)現(xiàn)裝置,用于根據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn).13.根據(jù)權(quán)利要求12的系統(tǒng),其中對(duì)程序變量的所述訪問(wèn)位置信息包括對(duì)該程序變量的訪問(wèn)位置集合,且所述實(shí)現(xiàn)裝置用于在該程序變量的訪問(wèn)位置集合的每一訪問(wèn)位置處設(shè)置斷點(diǎn).14.根據(jù)權(quán)利要求13的系統(tǒng),其中所述訪問(wèn)位置集合包括讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.15.根據(jù)權(quán)利要求14的系統(tǒng),其中所述生成裝置用于從程序變量的定義使用鏈或使用定義鏈生成所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.16.根據(jù)權(quán)利要求15的系統(tǒng),其中所述生成裝置包括轉(zhuǎn)換模塊,用于將該程序的每個(gè)變量的、中間表示的定義使用鏈轉(zhuǎn)換為該變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;以及更新模塊,用于在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合.17.根據(jù)權(quán)利要求16的系統(tǒng),其中所述生成裝置還包括寫入符號(hào)表模塊,用于將所述中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合寫入符號(hào)表.18.根據(jù)權(quán)利要求16的系統(tǒng),其中所述生成步驟還包括寫入二進(jìn)制代碼文件模塊,用于將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.19.根據(jù)權(quán)利要求17的系統(tǒng),其中所述寫入符號(hào)表模塊用于將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合作為所述符號(hào)表中相應(yīng)變量條目的擴(kuò)展寫入所述符號(hào)表.20.根據(jù)權(quán)利要求16的系統(tǒng),其中所述在調(diào)試器端的實(shí)現(xiàn)裝置包括讀取模塊,用于讀取所述指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;設(shè)置模塊,用于在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;以及判斷模塊,用于當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否被標(biāo)記為綁定到任何指定的程序變量,并用于當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中.21.—種編譯器,該編譯器用于從源程序生成帶有可用于調(diào)試的該程序中各變量的訪問(wèn)位置信息的、該程序的二進(jìn)制代碼文件,其特征在于包括生成模塊,用于根據(jù)對(duì)該程序的數(shù)據(jù)流分析的結(jié)果生成該程序中每個(gè)變量的、中間表示的讀訪問(wèn)指令集合和寫訪問(wèn)指令集合;更新模塊,用于在代碼生成階段,將所述讀訪問(wèn)指令集合和寫訪問(wèn)指令集合更新為相應(yīng)的二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;以及寫入二進(jìn)制代碼文件模塊,用于將所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合寫入該程序的二進(jìn)制代碼文件.22.—種調(diào)試器,該調(diào)試器用于根據(jù)由上述編譯器所生成的、程序的二進(jìn)制代碼文件進(jìn)行調(diào)試,其特征在于包括讀取模塊,用于讀取用戶指定的程序變量的所述二進(jìn)制的讀訪問(wèn)位置集合和寫訪問(wèn)位置集合;設(shè)置模塊,用于在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn),并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量;以及判斷模塊,用于當(dāng)調(diào)試器檢測(cè)到斷點(diǎn)命中時(shí),判斷該斷點(diǎn)是否被標(biāo)記為綁定到任何指定的程序變量,并用于當(dāng)該判斷為是時(shí),通知用戶該指定的程序變量上的觀察點(diǎn)被命中。23.—種計(jì)算機(jī)可讀介質(zhì),在其上存儲(chǔ)有用于實(shí)現(xiàn)前面方法權(quán)利要求的任何方法的指令的計(jì)算機(jī)程序產(chǎn)品.全文摘要本發(fā)明提供了一種用于實(shí)現(xiàn)在計(jì)算機(jī)程序的調(diào)試中使用的觀察點(diǎn)的方法和系統(tǒng),該方法包括在該程序的編譯階段,通過(guò)數(shù)據(jù)流分析生成對(duì)該程序中各變量的訪問(wèn)位置信息;以及在該程序的調(diào)試階段,根據(jù)對(duì)用戶指定的程序變量的所述訪問(wèn)位置信息實(shí)現(xiàn)對(duì)所述程序變量的觀察點(diǎn)。優(yōu)選地,所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合是從程序變量的DU鏈或UD鏈生成的。優(yōu)選地,所述實(shí)現(xiàn)步驟通過(guò)在所述讀訪問(wèn)位置集合和寫訪問(wèn)位置集合中的每個(gè)訪問(wèn)位置處設(shè)置斷點(diǎn)、并將該斷點(diǎn)標(biāo)記為綁定到所述指定的程序變量來(lái)設(shè)置觀察點(diǎn)并通過(guò)在被標(biāo)記為綁定到指定的程序變量的斷點(diǎn)被命中時(shí)觸發(fā)觀察點(diǎn)。文檔編號(hào)G06F11/36GK101192193SQ20061014688公開(kāi)日2008年6月4日申請(qǐng)日期2006年11月27日優(yōu)先權(quán)日2006年11月27日發(fā)明者任黨恩,武周,孫紅東,彭紅波申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
专栏| 洛南县| 鹤壁市| 奉化市| 福建省| 绍兴县| 华池县| 内乡县| 财经| 始兴县| 左权县| 藁城市| 阳春市| 奇台县| 镇赉县| 乌拉特中旗| 呼伦贝尔市| 苏尼特右旗| 浑源县| 五台县| 博野县| 荆门市| 池州市| 朔州市| 济南市| 高碑店市| 拜城县| 阿坝县| 通河县| 六枝特区| 海安县| 兴仁县| 时尚| 吐鲁番市| 香港 | 娄烦县| 电白县| 沂南县| 上蔡县| 上高县| 屏东市|