專利名稱:指令執(zhí)行設備、調(diào)試方法、調(diào)試設備以及調(diào)試程序的制作方法
技術領域:
本發(fā)明涉及一種調(diào)試輔助技術,特別是涉及使用一種調(diào)試功能的軟件中斷技術在包括條件指令的程序中設置斷點的技術。
背景技術:
近幾年開發(fā)的處理器能夠執(zhí)行將指令的執(zhí)行條件指定至該指令本身的條件指令。
當調(diào)試可由處理器執(zhí)行的程序時,可使用軟件中斷技術在程序中設置斷點。軟件中斷技術為將位于設置為斷點的位置上的指令重寫到中斷指令(一種類型的調(diào)試指令)中以執(zhí)行中斷處理的技術。斷點為指令位置,在作為調(diào)試對象的程序執(zhí)行過程中,該程序在此處被掛起(suspend)。
根據(jù)軟件中斷技術,將指令存儲器中的任意指令重寫入中斷指令中,并且由在其指令集中具有中斷指令的處理器、模擬處理器功能的仿真器等執(zhí)行該中斷指令。
處理器、仿真器等從指令存儲器中讀取指令,解碼所讀取的中斷指令,并且通過執(zhí)行所解碼的中斷指令而產(chǎn)生中斷并掛起程序的執(zhí)行。
然而,當使用軟件中斷技術執(zhí)行在條件指令處設置有斷點的程序時,如果讀取到中斷指令,則即使由中斷指令指定的執(zhí)行條件沒有滿足,傳統(tǒng)的處理器或類似的處理器也會產(chǎn)生中斷并掛起程序的執(zhí)行。
作為解決上述問題的一種方法,公開號為H11-341077的日本專利申請公開了以下中斷控制方法。當處理器執(zhí)行中斷指令并且發(fā)生中斷時,調(diào)試設備判斷在條件指令重寫入中斷指令之前,是否滿足該條件指令的執(zhí)行條件,并且如果判斷結(jié)果為執(zhí)行條件未得到滿足,則處理器重新開始執(zhí)行該程序。
在程序開發(fā)中希望減少調(diào)試所需的時間,以提高效率。
然而,使用已描述的中斷控制方法,每當程序的執(zhí)行停止在斷點處時,調(diào)試設備會介入。由于調(diào)試設備的介入是阻礙減少調(diào)試所需時間的一個因素,故所述中斷控制方法不能有效地響應程序開發(fā)中的需求。
發(fā)明內(nèi)容
考慮到所述問題,本發(fā)明的目的是提供一種能夠減少用于調(diào)試可執(zhí)行程序所需時間的指令執(zhí)行設備,在可執(zhí)行程序中,使用軟件中斷技術在條件指令處設置有斷點,而不需要調(diào)試設備的介入。本發(fā)明進一步的目的是提供用于在包括條件指令的程序中設置斷點的調(diào)試方法、調(diào)試設備和調(diào)試裝置。
為了實現(xiàn)所述目的,本發(fā)明提供了一種執(zhí)行存儲在存儲設備中的指令的指令執(zhí)行設備,其包括用于存儲作為指令執(zhí)行結(jié)果的值的存儲單元;用于執(zhí)行中斷指令執(zhí)行的調(diào)試指令的執(zhí)行單元;識別單元,用于從構成調(diào)試指令的位序列中識別條件表達式,該條件表達式使用作為操作數(shù)存儲在存儲單元中的數(shù)值;和判斷單元,用于通過參考存儲在存儲單元中的值而判斷被識別的條件表達式是真或者假,其中當條件表達判斷為假時,執(zhí)行單元禁止調(diào)試指令的執(zhí)行。
這里,指令執(zhí)行設備例如是處理器、模擬處理器的仿真器或者模擬處理器操作的模擬器。
所述指令執(zhí)行設備在沒有調(diào)試設備介入的情況下,根據(jù)條件指令的執(zhí)行條件表達式為真或者假而判斷是否停止調(diào)試。因此,與傳統(tǒng)的中斷控制方法相比,可減少調(diào)試所花費的時間,并且能夠以提高的效率執(zhí)行調(diào)試。
在所述的指令執(zhí)行裝置中,調(diào)試指令在長度上可能比指令執(zhí)行設備的指令集中長度最短的指令短。
根據(jù)所述的結(jié)構,在使用軟件中斷技術設置斷點時,可以避免沒有作為重寫對象的指令的錯誤重寫。
本發(fā)明的調(diào)試方法在可以由上述指令執(zhí)行設備解碼和執(zhí)行過的程序中設置斷點,該方法包括判斷在被設為斷點的位置處的指令是否為條件指令;并且當判斷結(jié)果是在被設置為斷點的位置處的指令是條件指令時,將該條件指令重寫到一調(diào)試指令中,該調(diào)試指令指定了與該條件指令的執(zhí)行條件相同的執(zhí)行條件。
本發(fā)明的調(diào)試設備在可以由上述指令執(zhí)行設備解碼和執(zhí)行過的程序中設置斷點,該調(diào)試設備包括判斷單元,用于判斷被設置為斷點的位置處的指令是否為條件指令;重寫單元,用于當判斷結(jié)果是被設置為斷點的位置處的指令是條件指令時,將該條件指令重寫到一調(diào)試指令中,該調(diào)試指令指定了與該條件指令的執(zhí)行條件相同的執(zhí)行條件。
本發(fā)明的調(diào)試程序在可以由上述指令執(zhí)行設備解碼和執(zhí)行過的程序中設置斷點,該調(diào)試程序包括判斷步驟,判斷被設置為斷點的位置處的指令是否為條件指令;重寫步驟,當判斷結(jié)果是被設置為斷點的位置處的指令是條件指令時,將該條件指令重寫到一調(diào)試指令中,該調(diào)試指令指定了與該條件指令的執(zhí)行條件相同的執(zhí)行條件。
所述調(diào)試方法、調(diào)試設備和調(diào)試程序都將設置為斷點的位置處的條件指令重寫入一調(diào)試指令,該調(diào)試指令具有與該條件指令的執(zhí)行條件相同的執(zhí)行條件。當指令執(zhí)行裝置執(zhí)行重寫的條件指令所屬的程序的調(diào)試時,在沒有外部源諸如調(diào)試設備介入的情況下,該指令執(zhí)行設備根據(jù)調(diào)試指令的執(zhí)行條件表達式為真或者假來判斷是否執(zhí)行中斷程序。因此,與傳統(tǒng)的中斷控制方法相比,可以減少調(diào)試所花費的時間,并且能夠以提高的效率執(zhí)行調(diào)試。
所述調(diào)試方法可進一步包括當判斷結(jié)果是設置為斷點的位置處的指令是條件指令時,基于位于該條件指令之前位置處的指令,是否可能預測該條件指令的執(zhí)行條件是否滿足的預測,并且當判斷結(jié)果是不可能預測時,通知用戶該預測是不可能的。
根據(jù)所述的方法,當不能預測要設置斷點處的條件指令的執(zhí)行條件是否將得到滿足時,告知用戶該預測是不可能的。因此,用戶能夠考慮到這一提示而重新設置斷點。
所述調(diào)試方法進一步包括當判斷結(jié)果是設置為斷點的位置處的指令是條件指令時,基于該條件指令之前位置處的指令判斷是否可能預測該條件指令的執(zhí)行條件是否滿足的預測,當判斷結(jié)果是不可能預測時,在位于該條件指令之后的一條或多條指令中查找最接近該條件指令的指令,并且所述一條或多條指令為(a)具有不同于該條件指令的執(zhí)行條件的第二條件指令,和(b)沒有條件的無條件指令中的一種,并且將作為查找結(jié)果找到的指令位置設置為預備斷點。
根據(jù)所述的方法,除了要作為斷點的條件指令的位置外,一條或多條查找到的指令的位置也被設置為斷點。因此,在設置有斷點的程序調(diào)試中,即使調(diào)試的執(zhí)行沒有停止在要作為斷點的條件指令的位置處,調(diào)試仍能停止在隨后的查找到的指令的位置處。
所述調(diào)試方法可進一步包括當判斷結(jié)果是設置為斷點的位置處的指令是條件指令時,查找一條或多條位于該條件指令之后的指令,并且且這樣的一條或多條指令為(a)具有多個執(zhí)行條件中任何一個的條件指令和(b)沒有條件的無條件指令中的一種,并且將作為查找結(jié)果找到的一條或多條指令的各位置設置為斷點候選位置。
根據(jù)所述的方法,除了要作為斷點的條件指令的位置外,也將查找到的一條或多條指令的位置設置為斷點。因此,在設置有斷點的程序的調(diào)試中,即使調(diào)試的執(zhí)行沒有停止在要作為斷點的條件指令的位置處,該調(diào)試仍能停止于隨后的查找到的指令的位置處。
所述調(diào)試方法可進一步包括當設置為斷點的位置處的指令是子程序中的條件指令時,判斷查找中的查找位置是否為該子程序的結(jié)束位置,并且當判斷結(jié)果是該查找位置是子程序的結(jié)束位置時,結(jié)束該查找。
根據(jù)所述的方法,當子程序中的條件指令的位置被設置為斷點,并且該條件指令之外的指令位置被設置為斷點時,可以在不超過子程序邊界的范圍內(nèi)可以執(zhí)行對要被設置為斷點的指令位置的查找。
所述調(diào)試方法可進一步包括判斷查找中的查找位置處的條件指令的執(zhí)行條件是否是查找中在先找到的條件指令的執(zhí)行條件的相反條件,并且當位于查找位置處的條件指令的執(zhí)行條件是在先找到的條件指令的執(zhí)行條件的相反條件時,結(jié)束該查找。
根據(jù)所述方法,指定特定執(zhí)行條件的條件指令的位置以及具有與特定執(zhí)行條件相反的執(zhí)行條件的條件指令的位置都被設置為斷點,以確保停止調(diào)試。這意味著如果能夠找到指定特定執(zhí)行條件的條件指令和具有與該特定執(zhí)行條件相反的執(zhí)行條件的條件指令,則查找可以結(jié)束。因此,可減少冗余的查找處理。
從以下與解釋本發(fā)明具體實施例的附圖結(jié)合的說明中,本發(fā)明的這些和其它目的、優(yōu)點以及特征將變得顯而易見。
在附圖中圖1是表示按照本發(fā)明實施方式的調(diào)試輔助系統(tǒng)整體結(jié)構的結(jié)構圖;
圖2是表示圖1中主機結(jié)構的結(jié)構圖;圖3是表示圖2中調(diào)試單元功能的功能結(jié)構圖;圖4是表示圖1中的評估板結(jié)構的結(jié)構圖;圖5是表示圖4的處理器的32位指令格式;圖6是表示執(zhí)行條件之間的關系;圖7是表示圖4的處理器的32位中斷指令格式;圖8是表示ARM處理器的ARM代碼中的中斷指令格式;圖9是表示圖4的處理器的16位擴展指令格式;圖10是表示與圖4的處理器的擴展指令相對應的16位中斷指令格式;圖11是表示ARM處理器的THUMB代碼中的中斷指令格式;圖12是表示圖4的處理器的流水線結(jié)構;圖13是表示斷點設置處理的操作流程的流程圖;圖14是表示中斷指令重寫處理的操作流程的流程圖;圖15示出了部分源程序;圖16示出了與圖15的源程序相對應的部分調(diào)試信息;圖17示出了其中設置有斷點的部分調(diào)試信息;圖18是表示中斷處理的操作流程的流程圖;圖19是表示可預測性判斷處理的操作流程的流程圖;圖20是表示查找預備斷點的查找處理的操作流程的流程圖;圖21是表示查找預備斷點的查找處理的操作流程的流程圖;圖22示出了條件查找表;圖23示出了部分源程序;圖24示出了與圖23的源程序相對應的部分調(diào)試信息;以及圖25示出了其中設置有斷點的部分調(diào)試信息。
具有實施方式下面結(jié)合
本發(fā)明的實施方式。
結(jié)構整體結(jié)構下面參考圖1描述按照本發(fā)明實施方式的調(diào)試輔助系統(tǒng)的整體結(jié)構。圖1是表示本發(fā)明實施方式的調(diào)試輔助系統(tǒng)整體結(jié)構的結(jié)構圖。
調(diào)試輔助系統(tǒng)1由主機2、評估板3和連接電纜4組成,主機2和評估板3通過連接電纜4連接。
主機2中的處理器具有在可執(zhí)行程序中設置斷點的功能,該可執(zhí)行程序為使用軟件中斷技術調(diào)試的對象。該處理器或者根據(jù)用戶指令或者自動地設置斷點。當設置斷點時,如果將可執(zhí)行程序中條件指令的位置設置為斷點,則處理器將設置位置處的條件指令重寫入條件中斷指令,該條件中斷指令的執(zhí)行條件為該條件指令的執(zhí)行條件。
根據(jù)來自用戶的執(zhí)行調(diào)試的指令,主機2中的處理器使評估板3中的處理器31執(zhí)行其中設置有斷點的可執(zhí)行程序的調(diào)試。
執(zhí)行作為調(diào)試對象的可執(zhí)行程序的處理器31安裝在評估板3中。
一旦在可執(zhí)行程序的調(diào)試期間讀取到條件中斷指令,處理器31就判斷條件中斷指令的執(zhí)行條件表達式是真還是假。如果判斷結(jié)果為執(zhí)行條件表達式是真,則處理器31執(zhí)行中斷操作并掛起調(diào)試,如果判斷結(jié)果為執(zhí)行條件表達式是假,則繼續(xù)調(diào)試。
主機2的結(jié)構下面參考圖2說明圖1中主機2的結(jié)構。圖2是表示圖1的主機2結(jié)構的結(jié)構圖。
主機2由存儲單元21、輸入/輸出設備22、處理器23、IF(接口)單元24以及總線25組成。
存儲單元21在其中存儲各種控制程序和其它軟件。存儲單元21還在其中存儲源程序21A、可執(zhí)行程序21B以及調(diào)試信息21C。
輸入/輸出設備22由輸入設備和輸出設備組成,輸入設備為鍵盤、定位設備等類似設備,輸出設備為顯示器、揚聲器等類似設備。
處理器23作為程序轉(zhuǎn)換單元23A、調(diào)試單元23B等工作。
根據(jù)來自輸入/輸出設備22的信號,程序轉(zhuǎn)換單元23A將存儲在存儲單元21中的源程序轉(zhuǎn)換為可由計算機執(zhí)行格式的可執(zhí)行程序,并在存儲單元21中存儲該可執(zhí)行程序。當將源程序轉(zhuǎn)換為可執(zhí)行程序21B時,該程序轉(zhuǎn)換單元23A產(chǎn)生助憶性表示該可執(zhí)行程序的調(diào)試信息,并在存儲單元21中存儲該調(diào)試信息。
調(diào)試單元23B參考存儲單元21中的源程序、可執(zhí)行程序和調(diào)試信息,在可執(zhí)行程序中設置斷點。當設置斷點時,調(diào)試單元21B執(zhí)行指令重寫處理。該指令重寫處理包括以下操作,即如果在設置為斷點的位置處的指令為條件指令,則將該條件指令重寫到執(zhí)行條件為該條件指令的執(zhí)行條件的條件中斷指令中。
調(diào)試單元23B還執(zhí)行與調(diào)試輔助相關的其它處理,諸如使評估板3中的處理器31執(zhí)行其中設置有斷點的可執(zhí)行程序。
IF單元24具有作為在主機2和評估板3之間傳遞信號的媒介的功能。
調(diào)試單元23B下面參考圖3說明圖2的調(diào)試單元23B的功能。圖3是表示圖2的調(diào)試單元23B功能的功能方塊圖。
調(diào)試單元23B由輸入/輸出處理單元61、讀取處理單元62、指令參考/修改處理單元63、執(zhí)行/停止控制處理單元64、調(diào)試信息查找處理單元65以及斷點設置處理單元66組成。
輸入/輸出處理單元61執(zhí)行的處理包括來自輸入/輸出設備22的信號的接收處理以及至輸入/輸出設備22的信號的輸出處理。
讀取處理單元62從存儲單元21中讀取可執(zhí)行程序和調(diào)試信息。
指令參考/修改處理單元63基于由輸入/輸出處理單元61接收的信號內(nèi)容(執(zhí)行調(diào)試的人員利用輸入/輸出設備22輸入的內(nèi)容),參考或修改由讀取處理單元62讀取的可執(zhí)行程序和調(diào)試信息中的期望指令。
執(zhí)行/停止控制處理單元64自動地或者基于由輸入/輸出處理單元61接收的信號內(nèi)容(執(zhí)行調(diào)試的人員利用輸入/輸出設備22輸入的內(nèi)容)使處理器31執(zhí)行或停止調(diào)試。
調(diào)試信息查找處理單元65具有自動地或者基于由輸入/輸出處理單元61接收的信號內(nèi)容(執(zhí)行調(diào)試的人員利用輸入/輸出設備22輸入的內(nèi)容)從調(diào)試信息中查找期望指令的功能。
斷點設置處理單元66具有自動地或者基于由輸入/輸出處理單元61接收的信號內(nèi)容(執(zhí)行調(diào)試的人員利用輸入/輸出設備22輸入的內(nèi)容)在特定的指令位置設置斷點的功能。
評估板3的結(jié)構下面參考圖4說明圖1的評估板3。圖4是表示圖1的評估板3結(jié)構的結(jié)構圖。
評估板3由處理器31、存儲器32、IF單元33、以及總線34構成,處理器31、存儲器32、IF單元33通過總線34連接。
存儲器32在其中存儲有作為調(diào)試對象的可執(zhí)行程序等。
IF單元33具有作為在評估板3和主機2之間傳遞信號的媒介的功能。
處理器31中的狀態(tài)寄存器(標志寄存器)36在其中存儲有狀態(tài)標志,該狀態(tài)標志表示六個執(zhí)行條件(后述)中每一個的滿足狀態(tài)。
處理器31在存儲器32中存儲可執(zhí)行程序,該可執(zhí)行程序為通過IF單元33從主機2接收的調(diào)試對象。在調(diào)試單元23B的控制下,處理器31從存儲器32中讀取可執(zhí)行程序,且執(zhí)行對該讀取的可執(zhí)行程序的調(diào)試。一旦在調(diào)試期間讀取到條件中斷指令,處理器31就參考狀態(tài)寄存器36以判斷條件中斷指令的執(zhí)行條件是否滿足。如果判斷結(jié)果是滿足執(zhí)行條件,則處理器31執(zhí)行中斷處理以掛起調(diào)試,并且如果判斷結(jié)果是不滿足條件,則繼續(xù)調(diào)試。
當處理器31掛起調(diào)試時,調(diào)試單元23B及時讀取存儲在處理器31的寄存器中的值以及存儲在存儲器32中的數(shù)據(jù),并向輸入/輸出設備22輸出所讀取的信息,從而向編程者通知該信息。
處理器31具有RISC(精簡指令集計算機)指令集架構,該架構在指令集中包括條件指令。處理器31的基本結(jié)構與ARM(高級RISC機器)處理器相同,該ARM處理器為在其指令集中具有條件指令的RISC處理器的代表。
處理器31不同于傳統(tǒng)的ARM處理器,這是由于其指令集包括有其執(zhí)行指令為條件指令的執(zhí)行指令的條件中斷指令,并且如果滿足條件中斷指令的執(zhí)行條件,則其在調(diào)試期間執(zhí)行中斷處理。
指令格式(32位指令格式)下面參考圖5說明處理器31的32位指令格式。圖5表示處理器31的32位指令格式。注意到,處理器31的32位指令格式與ARM處理器中使用的ARM代碼基本相同。
圖5中示出的由位號31至28表示的四位為顯示執(zhí)行條件的字段,由位號27至0表示的28位為顯示指令的字段。此外,“cond”表示執(zhí)行條件,并且各“x”表示可以取數(shù)值“0”或“1”的位。
例如,“cond”為“0001”表示執(zhí)行條件為“ZERO”。執(zhí)行條件“ZERO”意味著“如果最近執(zhí)行的計算結(jié)果為‘0’則執(zhí)行”。而且,“cond”為“1110”表示執(zhí)行條件是無條件的,換言之,指令沒有執(zhí)行條件。
在處理器31的該指令集架構中,以下六個執(zhí)行條件可由條件指令指定“ZERO”、“NZERO”、“CARRY”、“NCARRY”、“OVER”和“NOVER”。
“ZERO”如上所述,而“NZERO”與“ZERO”相反。
執(zhí)行條件“CARRY”的意思是“如果在最近執(zhí)行的計算結(jié)果中出現(xiàn)進位則執(zhí)行”。而“NCARRY”與之相反。
執(zhí)行條件“OVER”的意思是“如果最近執(zhí)行的帶符號數(shù)據(jù)的算術計算結(jié)果產(chǎn)生溢出則執(zhí)行”。而“NOVER”與之相反。
注意到,所述執(zhí)行條件之間的關系在圖6中示出。
(32位中斷指令格式)下面參考圖7說明處理器31的32位中斷指令格式。圖7表示處理器31的32位中斷指令格式。
圖7中示出的位號31至28表示的四位為顯示執(zhí)行條件的字段(圖7中該表示為“cond”的字段),由位號27至0表示的28位是顯示指令的字段。位號27至0的所有位具有值“1”,表示該指令為中斷指令。
為參考起見,圖8示出了ARM處理器的ARM代碼中的中斷指令格式。從圖8可以看出,在傳統(tǒng)的中斷指令格式中不存在用于指定執(zhí)行條件的“cond”,而且顯然不能指定執(zhí)行條件。
(16位擴展指令格式)ARM處理器具有被稱為16位THUMB代碼的擴展指令集,并且因此,處理器31也具有16位擴展指令集。
下面參考圖9說明處理器31的16位擴展指令格式。圖9示出了處理器31的16位指令格式。
圖9中示出的由位號11至8表示的四位為顯示執(zhí)行條件的字段(圖9中表示為“cond”的字段),由位號15至12表示的四位以及由位號7至0表示的八位是顯示指令的字段。各“x”表示可以取數(shù)值“0”或“1”的位。
(與擴展指令相對應的16位中斷指令格式)
下面說明與處理器31的擴展指令相對應的16位中斷指令格式。圖10表示與處理器31的擴展指令相對應的16位中斷指令格式。
圖10中示出的由位號11至8表示的四位是顯示執(zhí)行條件的字段(圖10中表示為“cond”的字段),由位號15至12表示的四位以及由位號7至0指示的八位是顯示指令的字段。位號15至12以及位號7至0的所有位具有值1,表示該指令是中斷指令。
為參考起見,圖11示出了ARM處理器的THUMB代碼中的中斷指令格式。從圖11可以看出,在THUMB代碼的中斷指令格式中不存在用于指定執(zhí)行條件的“cond”,而且顯然不能指定執(zhí)行條件。
處理器31的流水線處理下面參考圖12說明圖4的處理器31的流水線處理。圖12示出了處理器31的流水線結(jié)構。
處理器31具有五級流水線結(jié)構。這五級是IF(指令獲取)級31A,用于將從存儲器32讀取的指令獲取至與處理器31相關的指令緩沖器(未示出);DC(解碼)級31B,用于解碼獲取至指令緩沖器中的指令;EX(執(zhí)行)級31C,執(zhí)行被解碼的指令;MEM(存儲器)級31D,訪問寄存器、存儲器堆棧等;以及WB(回寫)級31E,向寄存器、存儲器等寫入指令執(zhí)行結(jié)果。
當根據(jù)EX級31C、MEM級31D和WB級31E任何一個中的任意指令,與執(zhí)行條件相對應的狀態(tài)標志值發(fā)生變化時,該級更新狀態(tài)寄存器36中的該值,并根據(jù)通知信號31a向DC級31B通知(向前)該值。
DC級31B判斷被解碼的指令是否為中斷指令。如果判斷結(jié)果為被解碼的指令是中斷指令,則DC級31B判斷該中斷指令是否為條件中斷指令。如果判斷結(jié)果為該解碼指令是條件中斷指令,則DC級31B基于字段“cond”識別該條件中斷指令的執(zhí)行條件是否為前述的六種執(zhí)行條件之一,并且基于狀態(tài)寄存器36中的狀態(tài)標志,檢查是否滿足被識別的執(zhí)行條件。
如果滿足條件中斷指令的執(zhí)行條件,則DC級31B執(zhí)行異常記錄,其為中斷處理的執(zhí)行記錄。如果不滿足條件中斷指令的執(zhí)行條件,則EX級31C不執(zhí)行被解碼的條件指令。
當記錄了異常時,DC級31B向IF級31A送出控制信號31b,以刪除(刷新)獲取至指令緩沖器中的指令。
在WB級31E中檢測記錄在DC級31B中的異常,一旦檢測到異常,WB級31E就向IF級31A發(fā)出中斷向量信號31C,并通知即將執(zhí)行的下一指令的地址,從而執(zhí)行中斷處理。
注意到,DC級31B在被解碼的指令為32位指令的情況下基于位碼27至0的值,并且在被解碼的指令為16位指令的情況下基于位碼15至12和位碼7至0的值,判斷該被解碼的指令是否為中斷指令。而且,DC級31B在中斷指令為32位指令的情況下基于位碼27至0,并且在中斷指令為16位指令的情況下基于位碼15至12和位碼7至0,判斷該中斷指令是否為條件中斷指令。
操作斷點設置處理下面參考圖13說明由圖3的斷點設置處理單元66執(zhí)行的斷點設置處理。圖13是表示由斷點設置處理單元66執(zhí)行的斷點設置處理的操作流程的流程圖。
斷點設置處理單元66設置斷點的位置(步驟S101),并在其中存儲設置為斷點的位置(地址)和該位置的指令(步驟S102)。
基于設置為斷點位置的指令中的“cond”字段,斷點設置處理單元66判斷該指令是否為條件指令(步驟S103)。如果判斷結(jié)果是設置為斷點位置的指令是條件指令(步驟S103是),則斷點設置處理單元66將條件指令重寫入其執(zhí)行條件為該條件指令的執(zhí)行條件的條件中斷指令中(步驟S104)。另一方面,如果判斷結(jié)果是設為斷點位置的指令不是條件指令,換言之,當指令沒有執(zhí)行條件時(步驟S103否),則斷點設置處理單元66向不具有執(zhí)行條件的無條件中斷指令中重寫該指令(S105)。
(步驟S104和步驟S105)下面參考圖14說明在圖13的步驟S104和步驟S105執(zhí)行的用于重寫設為斷點位置的指令的中斷指令重寫處理。圖14是表示在圖13的步驟S104和步驟S105執(zhí)行的中斷指令重寫處理的操作流程的流程圖。注意到,在該實施方式中,用于將條件指令重寫入條件中斷指令的處理,以及用于將沒有條件的指令重寫入無條件中斷指令的處理在算法上是相同的。
屏蔽和中斷指令結(jié)構(pattern)分別提供給32位指令和16位指令,并且存儲在存儲單元21中。
在用于32位指令的屏蔽中,位碼31至28的四位全部具有值“1”,并且位碼27至0的28位全部具有值“0”。在用于32位指令的中斷指令結(jié)構中,位碼31至28的四位全部具有值“0”,并且位碼27至0的28位全部具有值“1”。
在用于16位指令的屏蔽中,位碼11至8的四位全部具有值“1”,并且其余位碼具有值“0”。在用于16位指令的中斷指令結(jié)構中,位碼11至8的四位全部具有值“0”,并且其余位碼具有值“1”。
斷點設置處理單元66判斷設置為斷點的位置處的指令是32位指令還是16位指令(步驟S151)。
如果該指令為32位指令(步驟S151是),則斷點設置處理單元66為32位指令選擇屏蔽和中斷指令結(jié)構(步驟S152),并用選定的屏蔽來屏蔽指令,換言之,得到指令與選定的屏蔽的邏輯積(步驟S154)。因此,位于設置為斷點位置處的指令被重寫入指令,以使表示執(zhí)行條件的位碼31至28的四位保持不變,并且使位碼27至0的28位均為“0”。
接下來,斷點設置處理單元66得到在步驟S154處重寫的指令與中斷指令結(jié)構的邏輯與,以將重寫的指令重寫入中斷指令(S155)。因此,在步驟S154重寫的指令被重寫入中斷指令,以使表示執(zhí)行條件的位碼31至28的四位保持不變,并且位碼27至0的28位均為“1”。
如果該指令為16位指令(步驟S151否),則斷點設置處理單元66為16位指令選擇屏蔽和中斷指令結(jié)構(步驟S153),并用選定的屏蔽來屏蔽指令,換言之,得到指令與選定的屏蔽的邏輯積(步驟S154)。因此,位于設置為斷點位置的指令被重寫入指令,以使表示執(zhí)行條件的位碼11至8的四位保持不變,且使所有其它位碼均為“0”。
接下來,斷點設置處理單元66得到在步驟S154重寫的指令與中斷指令結(jié)構的邏輯與,以將重寫的指令重寫入中斷指令(步驟S155)。因此,將在步驟S154處重寫的指令重寫入中斷指令,以使表示執(zhí)行條件的位碼11至8的四位保持不變,并且所有其它位碼均為“1”。
(斷點設置處理的具體例子1)下面參考圖15至17說明當條件指令的位置被設置為斷點時斷點設置處理的具體例子。圖15示出了部分源程序。與圖15對應的圖16示出了助憶性表示可執(zhí)行程序的部分調(diào)試信息,當將源程序轉(zhuǎn)換為可執(zhí)行程序時產(chǎn)生該調(diào)試信息。圖17示出了助憶性表示其中設置有斷點的可執(zhí)行程序的部分調(diào)試信息。
圖15表示源代碼的行號以及用C語言表達的語句。圖15中源程序表示下述含義“為函數(shù)sub提供參數(shù)1并調(diào)用,將返回值代入變量r(行號10)。如果變量r的值位0,則向變量r加2(行號11至13)?!眻D16表示指令地址、指令的執(zhí)行條件以及助憶性表達的指令。圖16中的縮寫指令表示下述含義“在寄存器R1(地址0x80000000)中存儲1。向堆棧存儲下一指令的地址,并轉(zhuǎn)移至函數(shù)sub(地址0x80000004)。如果函數(shù)sub的結(jié)果位0,則將存儲在寄存器R1中的值加2獲得的值存儲到寄存器R1(0x80000008)中。如果函數(shù)sub的結(jié)果不為0,則將寄存器R1中的值寫到堆棧指針(地址0x8000000C)的值加0x10后得到的值所表示的存儲地址中。”而且,在圖16中,將“ZERO”指定為地址0x80000008的ADD指令的執(zhí)行條件。該執(zhí)行條件“ZERO”表示如果由直接在先的CALL指令調(diào)用的函數(shù)sub的結(jié)果為“0”,則應當執(zhí)行該ADD指令。
圖17表示當將地址0x80000008的位置設置為斷點,換言之,指定“ZERO”的條件指令的位置被設置為斷點時,斷點設置處理單元66使地址0x80000008的執(zhí)行條件“ZERO”保持不變,并且將加指令“ADD R1,2”重寫至表示中斷指令的“BRK”。
中斷處理下面參考圖18說明執(zhí)行調(diào)試期間由圖4的處理器31執(zhí)行的中斷處理。圖18是表示執(zhí)行調(diào)試期間由處理器31執(zhí)行的中斷處理的流程圖。
在調(diào)試執(zhí)行期間,處理器31的DC級31B判斷被解碼的指令是否為中斷指令(S201)。如果被解碼的指令不是中斷指令(步驟S201否),則EX級31C不執(zhí)行中斷處理。另一方面,如果被解碼的指令是中斷指令(步驟S201是),則DC級31B判斷該中斷指令是否為條件中斷指令(步驟S202)。
如果該指令不是條件中斷指令,換言之,如果該指令為無條件中斷指令(步驟S202否),則DC級31B執(zhí)行異常記錄,其包括IF級31A刷新存儲在指令緩沖器中的指令,以及EX級31C執(zhí)行中斷處理(步驟S206)。
另一方面,如果該指令為條件中斷指令(步驟S202是),則DC級31B識別該條件中斷指令的執(zhí)行條件是否為上述六種執(zhí)行條件之一(步驟S203)。接下來,DC級31B參考狀態(tài)寄存器36以檢查識別并獲得的執(zhí)行條件的狀態(tài)標志(步驟S204),并判斷是否滿足該執(zhí)行條件(步驟S205)。如果滿足執(zhí)行條件(步驟S205是),則DC級31B執(zhí)行異常記錄,其包括IF級31A刷新存儲在指令緩沖器中的指令,以及EX級31C執(zhí)行中斷處理(步驟S206)。另一方面,如果不滿足執(zhí)行條件(步驟S205否),則EX級31C不執(zhí)行中斷處理。
(效果)如上所述,通過使用處理器31以及執(zhí)行斷點設置處理的主機2,由于不需要諸如采用傳統(tǒng)的中斷控制方法執(zhí)行仿真,所以能夠減少執(zhí)行調(diào)試所需的時間。因此,可以有效地進行調(diào)試。
(變型)本發(fā)明并不局限于所述的實施方式。在本發(fā)明中還包含下述情形。
可預測性判斷處理當位于要設置為斷點的位置(例如,用戶指定為斷點的位置)處的指令為條件指令時,調(diào)試單元23B可以執(zhí)行處理以預測在調(diào)試期間是否會滿足條件指令的執(zhí)行條件。如果這是不可預測的,則調(diào)試單元23B將該結(jié)果通知給用戶。
圖19是表示可預測性判斷處理的操作流程的流程圖,其中在位于要設置為斷點的位置處的指令是條件指令的情況下,調(diào)試單元23B判斷是否能夠預測在執(zhí)行調(diào)試期間是否會滿足條件指令的執(zhí)行條件。注意到,可預測性判斷處理基于存儲在存儲單元21中的調(diào)試信息而執(zhí)行。
調(diào)試信息查找處理單元65將狀態(tài)標志設置為“0”,其表示位于要設置為斷點(步驟S301)的位置處的條件指令執(zhí)行條件的狀態(tài)改變。
接下來,調(diào)試信息查找處理單元65讀取位于調(diào)試執(zhí)行開始位置,即查找開始位置處的指令,并判斷該讀取的指令是否為指定作為斷點位置的條件指令(步驟S302)。如果是(步驟S302是),則調(diào)試信息查找處理單元65進入到步驟S313,并且如果不是(步驟S302否),則調(diào)試信息查找處理單元65進入到步驟S303。
調(diào)試信息查找處理單元65判斷位于查找位置處的指令是否為所謂的“第二條件指令”,該“第二條件指令”具有與要設置為斷點的位置處的條件指令執(zhí)行條件不同的執(zhí)行條件(步驟S303)。
如果在查找位置處的指令不是第二條件指令(步驟S303否),則調(diào)試信息查找處理單元65進入到步驟S308。
如果在查找位置處的指令是第二條件指令(步驟S303是),則調(diào)試信息查找處理單元65檢查表示第二條件指令執(zhí)行條件的狀態(tài)改變的狀態(tài)標志是否為“1”(步驟S304)。
如果第二條件指令執(zhí)行條件的狀態(tài)標志為“1”(步驟S304是),則調(diào)試信息查找處理單元65檢查該第二條件指令是否為分支指令(步驟S305)。
如果第二條件指令為分支指令(步驟S305是),則調(diào)試信息查找處理單元65判斷是要設置為斷點的位置處的條件指令執(zhí)行條件的滿足是否能夠預測(步驟S306)。基于調(diào)試信息查找處理單元65作出的“不可預測性”的判斷,輸入/輸出處理單元61執(zhí)行輸出處理以將該結(jié)果告知用戶,并將該通知顯示在輸入/輸出設備22的顯示器上。
如果第二條件指令不是分支指令(步驟S305否),則調(diào)試信息查找處理單元65進入到步驟S312。
如果第二條件指令執(zhí)行條件的狀態(tài)標志不是“1”(步驟304否),則調(diào)試信息查找處理單元65判斷第二條件指令的狀態(tài)標志是否與處理器31的狀態(tài)寄存器36中執(zhí)行條件的狀態(tài)標志相匹配(步驟S307)。如果二者相匹配(步驟S307是),則調(diào)試信息查找處理單元65繼續(xù)進行步驟S308的處理,如果二者不相匹配(步驟S307否),則調(diào)試信息查找處理單元65繼續(xù)進行步驟S312的處理。
在步驟S308,調(diào)試信息查找處理單元65檢查位于查找位置處的指令是否為影響任何條件指令執(zhí)行條件的指令(步驟S308)。注意,下文中將影響條件指令執(zhí)行條件的指令為“條件生成指令”。
如果位于查找位置處的指令為條件生成指令(步驟S308是),則調(diào)試信息查找處理單元65將受條件生成指令影響的執(zhí)行條件的狀態(tài)標志設置為“1”(步驟S309),并繼續(xù)進行步驟S312的處理。
如果位于查找位置處的指令不是條件生成指令(步驟S308否),則調(diào)試信息查找處理單元65檢查位于查找位置處的該指令是否為分支指令(步驟S310)。如果位于查找位置處的該指令為分支指令(步驟S310是),則調(diào)試信息查找處理單元65將查找位置移至分支目標位置(S311),并繼續(xù)進行步驟S302的處理。如果位于查找位置處的該指令不是分支指令(步驟S310否),則調(diào)試信息查找處理單元65繼續(xù)進行步驟S312的處理。
在步驟S312,調(diào)試信息查找處理單元65將查找位置移至下一指令(步驟S312),并繼續(xù)進行步驟S302的處理。
在步驟S313,調(diào)試信息查找處理單元65判斷位于要作為斷點的位置處的條件指令執(zhí)行條件的滿足是否能夠預測(步驟S313),并且斷點設置處理單元66根據(jù)該判斷結(jié)果將指定的條件指令位置設置為斷點(步驟S314)。接下來,斷點設置處理單元66繼續(xù)執(zhí)行圖13所示的步驟S102的處理。
查找處理1在所述可預測性判斷處理的步驟S306,當調(diào)試信息查找處理單元65判斷出位于要作為斷點的位置處的條件指令執(zhí)行條件的滿足為不可預測時,該調(diào)試信息查找處理單元65可執(zhí)行以下處理。明確地說,調(diào)試信息查找處理單元65可從第二條件指令和無條件指令中檢測最接近該條件指令的指令,所述無條件指令在位置上緊跟要作為斷點的位置處的條件指令。然后,調(diào)試信息查找處理單元65既可將該條件指令的位置,又可將檢測的指令位置設置為預備斷點。
圖20是表示由調(diào)試單元23B執(zhí)行的用于查找預備斷點的查找處理操作流程的流程圖。注意到,基于存儲在存儲單元21中的存儲信息而執(zhí)行該查找處理。
如果在圖19的步驟S306中調(diào)試信息查找處理單元65判斷出位于要作為斷點的位置處的條件指令執(zhí)行條件的滿足不可預測,則調(diào)試信息查找處理單元65查找該指定的條件指令之后的下一指令(步驟S401)。
調(diào)試信息查找處理單元65判斷位于查找位置處的指令是否為其執(zhí)行條件與要作為斷點的指定條件指令的執(zhí)行條件不相同的條件指令(步驟S402)。
如果位于查找位置處的指令為具有與要作為斷點的指定條件指令的執(zhí)行條件不同的執(zhí)行條件的條件指令(步驟S402是),則斷點設置處理單元66將指定的條件指令和查找位置處的指令都設為斷點(步驟S405)。然后,斷點設置處理單元66進入圖13所示的步驟S102的處理。
如果位于查找位置處的指令不是具有與要作為斷點的指定條件指令的執(zhí)行條件不同的執(zhí)行條件的條件指令(步驟S402否),則調(diào)試信息查找處理單元65檢查位于查找位置處的指令是否為無條件指令(步驟S403)。
如果位于查找位置處的指令為無條件指令(步驟S403是),則中斷設置處理單元66將指定的條件指令和位于檢查位置處的指令都設為斷點(步驟S405)。然后,斷點設置處理單元66進入圖13所示的步驟S102的處理。
如果位于查找位置處的指令不是無條件指令(步驟S403否),則調(diào)試信息查找處理單元65查找下一指令(步驟S404),并回到步驟S402的處理。
查找處理2當調(diào)試子程序時,如果將子程序中的條件指令位置設為斷點,可取代所述的可預測性判斷處理而執(zhí)行下面的查找處理,以設置一個或多個候選點作為預備斷點。
圖21是表示由調(diào)試單元23B執(zhí)行查找操作以設置一個或多個候選點作為預備斷點的查找處理操作流程的流程圖。注意到,該查找處理基于存儲在存儲單元21中的調(diào)試信息而執(zhí)行。
存儲單元21存儲圖21的查找處理中使用的條件查找表。條件查找表由成對的條件(執(zhí)行條件)和該條件的標志(狀態(tài)標志)組成,在圖22中示出其中的一個例子。圖22中條件查找表中的各執(zhí)行條件具有相反的條件。注意到,條件查找表不局限于包括作為執(zhí)行條件相反條件的執(zhí)行條件。
調(diào)試信息查找處理單元65為條件查找表中示出的各執(zhí)行條件設置狀態(tài)標志,并且將指定的條件指令之后的下一指令作為查找開始位置而開始查找(步驟S501)。
調(diào)試信息查找處理單元65判斷該查找位置是否為子程序的結(jié)束位置(步驟S502)。如果該查找位置為子程序的結(jié)束位置(步驟S502是),則調(diào)試信息查找處理單元65記錄該子程序的結(jié)束位置作為斷點候選位置(步驟S512),并結(jié)束該處理。如果該查找位置不是子程序的結(jié)束位置(步驟S502否),則調(diào)試信息查找處理單元65判斷該查找位置處的指令是否為條件指令(步驟S503)。
如果該查找位置處的指令不是條件指令,換言之,為無條件指令(步驟S503否),則調(diào)試信息查找處理單元65記錄該無條件指令的位置作為斷點候選位置(步驟S512),并結(jié)束處理。如果該查找位置處的指令是條件指令(步驟S503是),則調(diào)試信息查找處理單元65基于條件查找表而判斷位于查找位置處的條件指令執(zhí)行條件與在先找到的條件指令的執(zhí)行條件是否相同(步驟S504)。
如果位于查找位置處的條件指令的執(zhí)行條件與在先找到的條件指令的執(zhí)行條件相同(步驟S504是),則調(diào)試信息查找處理單元65將查找位置移至下一指令(步驟S511)。如果位于查找位置處的條件指令執(zhí)行條件與在先找到的條件指令的執(zhí)行條件不相同(步驟S504否),則調(diào)試信息查找處理單元65基于條件查找表而判斷位于查找位置處的條件指令執(zhí)行條件與在先找到的條件指令執(zhí)行條件是否相反(步驟S505)。
如果位于查找位置處的條件指令執(zhí)行條件與在先找到的條件指令執(zhí)行條件是相反的條件(步驟S505,是),則調(diào)試信息查找處理單元65在條件查找表中將位于查找位置處的條件指令執(zhí)行條件的狀態(tài)標志設置為“1”(步驟S506)。然后,調(diào)試信息查找處理單元65記錄位于查找位置處的條件指令位置作為斷點候選位置(步驟S507),并結(jié)束處理。
如果位于查找位置處的條件指令執(zhí)行條件與在先找到的條件指令執(zhí)行條件不是相反的條件(步驟S505,否),則調(diào)試信息查找處理單元65在條件查找表中將位于查找位置處的條件指令執(zhí)行條件的狀態(tài)標志設置為“1”(步驟S508)。接下來,調(diào)試信息查找處理單元65記錄查找位置處的條件指令位置作為斷點候選位置(步驟S509)。然后調(diào)試信息查找處理單元65判斷條件查找表中的全部狀態(tài)標志是否均為“1”(步驟S510)。
如果條件查找表中的全部狀態(tài)標志均為“1”(步驟S510是),則處理結(jié)束。如果條件查找表中的全部狀態(tài)標志并不都為“1”(步驟S510否),則調(diào)試信息查找處理單元65將查找位置移至下一指令(步驟S511)。
在圖13的步驟S101,斷點設置處理單元66將以上處理中記錄為斷點候選位置中的至少一個位置設為斷點。
(斷點設置處理的具體例子2)下面說明當執(zhí)行子程序的調(diào)試時將子程序中的條件指令位置設置為斷點以確保子程序的調(diào)試停止的斷點設置處理的具體例子。
圖23示出了源程序中的部分子程序。與圖23對應的圖24示出了助憶性表達可執(zhí)行程序的調(diào)試信息的一部分。當將源程序轉(zhuǎn)換為可執(zhí)行程序時產(chǎn)生該調(diào)試信息。圖25示出了助憶性表達其中設置有斷點的可執(zhí)行程序的調(diào)試信息的一部分。
圖23表示源代碼的行號,以及用C語言表示的語句。圖23中的源程序含義如下“為函數(shù)sub提供參數(shù)1并調(diào)用,將返回值代入變量r(行號10)。如果變量r的值為0,則返回至主程序(行號11至13)?!眻D24示出了指令地址、指令的執(zhí)行條件和助憶性表達的指令。圖24中的縮寫指令含義如下“在寄存器R1(地址0x80000000)中存儲1。保存下一個指令的地址至堆棧,并轉(zhuǎn)移至函數(shù)sub(地址0x80000004)。如果函數(shù)sub的結(jié)果為0,則在程序計數(shù)器中設置從堆棧指針的返回地址,并恢復主程序(地址0x80000008)。如果函數(shù)sub的結(jié)果不是0,則將寄存器R1的值寫至由堆棧指針(地址0x8000000C)的值加0x10得到的值表示的地址的存儲器。
在圖24中,如果將地址0x80000008的位置,即指定“ZERO”的條件指令的位置設置為斷點,則如圖25所示,斷點設置處理單元66使地址0x80000008的執(zhí)行條件“ZERO”保持不變,且重寫返回指令“RET”為表示中斷指令的“BRK”。而且,斷點設置處理單元66將位于返回指令之后并在該處理中被檢查的地址0x8000000C中的“轉(zhuǎn)移指令(SP+0x10)”重寫為表示中斷指令的“BRK”。
補充說明(1)本發(fā)明可以是執(zhí)行所述斷點設置處理的調(diào)試設備,或者可以是調(diào)試器或斷點設置方法。
(2)雖然在以上實施方式中對RISC處理器進行了說明,但本發(fā)明也可應用于CISC(復雜指令集計算機)處理器。
(3)雖然說明的是處理器31安裝在評估板3中,但處理器可設置在主機2中。而且,除了處理器31,可以在評估板3和主機2中設置模擬處理器31的仿真器,且該仿真器可執(zhí)行作為調(diào)試對象的可執(zhí)行程序的調(diào)試。而且,模擬處理器31操作的仿真器可以取代處理器31并以程序的形式包含在主機2中。此外,包含模擬處理器31操作的仿真程序的系統(tǒng)可以代替評估板3。
(4)雖然上述實施方式中說明的是處理器31具有兩種指令格式,具體地說是32位和16位指令,但處理器31可具有單一指令格式或者三種或更多種指令格式。而且,雖然對指令格式的說明限定了表示執(zhí)行條件的“cond”的位置,但該指令格式也可以是在不同于所述位置的位置上指定執(zhí)行條件的格式。
(5)當將本發(fā)明應用至能夠自由執(zhí)行不同長度指令的處理器時,可以提供長度為具有執(zhí)行條件(在本發(fā)明的優(yōu)選實施方式中為16位)的最短指令的中斷指令,且這可用于替代中斷指令。
(6)在上述實施方式中,為了使解釋簡化,將指令格式中的一部分位描述為表示執(zhí)行條件。然而,本發(fā)明的根本在于將中斷指令的執(zhí)行條件設置為與由該中斷指令代替的指令的執(zhí)行條件相同。例如,即使表示執(zhí)行條件的位不在指令格式中的指定位置上,但仍可充分地指定執(zhí)行條件。而且,能夠容易地確認由中斷指令代替的指令的執(zhí)行條件就足夠了,并且在該中斷指令中設置同樣的執(zhí)行條件。
(7)雖然在實施方式中說明的是處理器31具有五級結(jié)構,但流水線中的級數(shù)可以是不同于五的數(shù)目。而且,處理器31也不必一定具有流水線結(jié)構。
雖然已參考附圖通過例子對本發(fā)明進行了充分說明,要注意的是,各種改變和修改對本領域技術人員來說是顯而易見的。因此,除非這樣的改變和修改脫離了本發(fā)明的范圍,否則它們應當視為包含在其中。
工業(yè)適用性本發(fā)明可有效地應用于軟件開發(fā)執(zhí)行的調(diào)試中。
權利要求
1.一種指令執(zhí)行設備,其執(zhí)行存儲在存儲設備中的指令,該指令執(zhí)行設備包括存儲單元,用于存儲作為指令執(zhí)行結(jié)果的值;執(zhí)行單元,用于執(zhí)行中斷指令執(zhí)行的調(diào)試指令;識別單元,用于從構成調(diào)試指令的位序列中識別條件表達式,該條件表達式使用作為操作數(shù)存儲在存儲單元中的數(shù)值;判斷單元,用于通過參考存儲在存儲單元中的值判斷識別的條件表達式為真或假;其中,當判斷出條件表達式為假時,執(zhí)行單元禁止調(diào)試指令的執(zhí)行。
2.按照權利要求1所述的指令執(zhí)行設備,其特征在于,所述調(diào)試指令在長度上比該指令執(zhí)行設備的指令集中長度最短的指令短。
3.一種調(diào)試方法,其能夠在由權利要求1所述的指令執(zhí)行設備解碼并執(zhí)行過的程序中設置斷點,該方法包括判斷已設置為斷點的位置處的指令是否為條件指令;并且當判斷結(jié)果是已設置為斷點的位置處的指令是條件指令時,則將該條件指令重寫入指定了執(zhí)行條件的調(diào)試指令,該執(zhí)行條件與該條件指令的執(zhí)行條件相同。
4.按照權利要求3所述的調(diào)試方法,進一步包括當判斷出設置為斷點的位置處的指令是條件指令時,基于位于該條件指令之前位置處的指令而判斷是否可能預測該條件指令的執(zhí)行條件是否會被滿足,并且當判斷出該預測為不可能時,通知用戶該預測是不可能的。
5.按照權利要求3所述的調(diào)試方法,進一步包括當判斷出設置為斷點的位置處的指令是條件指令時,基于位于該條件指令之前位置處的指令而判斷是否可能預測該條件指令的執(zhí)行條件是否會被滿足,當判斷出該預測為不可能時,在位于該條件指令之后的一條或多條指令中查找與該條件指令最接近的指令,并且所述一條或多條指令為(a)具有不同于該條件指令執(zhí)行條件的第二條件指令,和(b)沒有條件的無條件指令中的一種,并且將作為查找結(jié)果找到的指令位置設置為預備斷點。
6.按照權利要求3所述的調(diào)試方法,進一步包括當判斷出設置為斷點的位置處的指令是條件指令時,查找一條或多條位于該條件指令之后的指令,并且這樣的一條或多條指令為(a)具有多個條件中任何一個的條件指令和(b)沒有條件的無條件指令中的一種,并且將作為查找結(jié)果找到的一條或多條指令的每一個位置設為斷點候選位置。
7.按照權利要求6所述的調(diào)試方法,進一步包括當判斷出設置為斷點的位置處的指令是子程序中的條件指令時,判斷該查找中的查找位置是否為該子程序的結(jié)束位置,并且當判斷出該查找位置是子程序的結(jié)束位置時,結(jié)束該查找。
8.按照權利要求6所述的調(diào)試方法,進一步包括判斷查找中的查找位置處的條件指令執(zhí)行條件是否與查找中在先找到的條件指令執(zhí)行條件相反,并且當位于查找位置處的條件指令執(zhí)行條件與在先找到的條件指令執(zhí)行條件相反時,結(jié)束該查找。
9.一種調(diào)試設備,其在能夠由權利要求1所述的指令執(zhí)行設備解碼并執(zhí)行過的程序中設置斷點,該調(diào)試設備包括判斷單元,用于判斷設置為斷點的位置處的指令是否為條件指令;以及重寫單元,用于當判斷出設置為斷點的位置處的指令是條件指令時,將該條件指令重寫入一調(diào)試指令,該調(diào)試指令指定與該條件指令的執(zhí)行條件相同的執(zhí)行條件。
10.一種調(diào)試程序,其在能夠由權利要求1所述的指令執(zhí)行設備解碼并執(zhí)行過的程序中設置斷點,該調(diào)試程序包括判斷步驟,判斷設置為斷點的位置上的指令是否為條件指令;以及重寫步驟,當判斷出設置為斷點的位置處的指令是條件指令時,將該條件指令重寫入一調(diào)試指令,該調(diào)試指令指定與該條件指令的執(zhí)行條件相同的執(zhí)行條件。
全文摘要
本發(fā)明提供了一種在執(zhí)行使用軟件中斷技術在條件指令處設置斷點的可執(zhí)行程序的調(diào)試中,根據(jù)該條件指令的執(zhí)行條件表達式為真或者假,在不使用調(diào)試設備的情況下,進行是否停止調(diào)試的判斷。能夠解碼并執(zhí)行含有條件指令的程序的處理器執(zhí)行該程序的調(diào)試。當解碼指令為條件中斷指令時(S201是,S202是),處理器識別該條件中斷指令的執(zhí)行條件類型(步驟S203),并參考狀態(tài)寄存器以檢查該執(zhí)行條件的狀態(tài)標志(S204)。如果滿足執(zhí)行條件(S205是),則處理器執(zhí)行中斷處理以掛起調(diào)試(S206),并且如果不滿足執(zhí)行條件(S205否),則處理器繼續(xù)調(diào)試。
文檔編號G06F11/36GK1869952SQ20061007842
公開日2006年11月29日 申請日期2006年5月26日 優(yōu)先權日2005年5月27日
發(fā)明者宅間顯, 柴田耕作 申請人:松下電器產(chǎn)業(yè)株式會社