亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

應(yīng)用程序調(diào)試方法和裝置制造方法

文檔序號(hào):6525044閱讀:214來(lái)源:國(guó)知局
應(yīng)用程序調(diào)試方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種應(yīng)用程序調(diào)試方法和裝置。所述方法包括:通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,目標(biāo)應(yīng)用程序運(yùn)行于所述目標(biāo)虛擬機(jī)中;將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī),所述調(diào)試事件請(qǐng)求是根據(jù)所述目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的;主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。所述裝置包括連接模塊、事件注冊(cè)模塊和處理模塊。采用本發(fā)明能在沒(méi)有源代碼支持的情況下對(duì)應(yīng)用程序進(jìn)行調(diào)試。
【專利說(shuō)明】應(yīng)用程序調(diào)試方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及程序調(diào)試技術(shù),特別是涉及一種應(yīng)用程序調(diào)試方法和裝置。
【背景技術(shù)】
[0002]應(yīng)用程序運(yùn)行過(guò)程出現(xiàn)各種bug (漏洞)的情況時(shí)有發(fā)生,因此,常常需要一定的調(diào)試器對(duì)應(yīng)用程序進(jìn)行調(diào)試,以獲知應(yīng)用程序中存在的bug,進(jìn)而對(duì)其進(jìn)行不斷的修復(fù)。
[0003]傳統(tǒng)的調(diào)試器大都為界面化調(diào)試器,用于提供一些標(biāo)準(zhǔn)的調(diào)試功能,調(diào)試功能較為齊全,足夠?qū)?yīng)用程序完成各種調(diào)試。但是,在這些傳統(tǒng)的調(diào)試器對(duì)應(yīng)用程序進(jìn)行調(diào)試的過(guò)程中必須有源代碼的支持。
[0004]然而,當(dāng)應(yīng)用程序運(yùn)行于某一遠(yuǎn)程環(huán)境中,因代碼受控,是無(wú)法將代碼發(fā)送到這一遠(yuǎn)程環(huán)境中的,因此,將造成了傳統(tǒng)的調(diào)試器無(wú)法在沒(méi)有源代碼支持的情況下對(duì)應(yīng)用程序進(jìn)行調(diào)試。

【發(fā)明內(nèi)容】

[0005]基于此,有必要針對(duì)傳統(tǒng)的調(diào)試器無(wú)法在沒(méi)有源代碼支持的情況下對(duì)應(yīng)用程序進(jìn)行調(diào)試的技術(shù)問(wèn)題,提供一種能在沒(méi)有源代碼支持的情況下對(duì)應(yīng)用程序進(jìn)行調(diào)試的應(yīng)用程序調(diào)試方法。
[0006]此外,還有必要提供一種能在沒(méi)有源代碼支持的情況下對(duì)應(yīng)用程序進(jìn)行調(diào)試的應(yīng)用程序調(diào)試裝置。
[0007]一種應(yīng)用程序調(diào)試方法,包括如下步驟:
[0008]通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,目標(biāo)應(yīng)用程序運(yùn)行于所述目標(biāo)虛擬機(jī)中;
[0009]將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī),所述調(diào)試事件請(qǐng)求是根據(jù)所述目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的;
[0010]主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。
[0011]在其中一個(gè)實(shí)施例中,所述通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接的步驟包括:
[0012]獲取輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,以生成調(diào)試命令;
[0013]通過(guò)生成的調(diào)試命令觸發(fā)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
[0014]在其中一個(gè)實(shí)施例中,所述將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī)的步驟包括:
[0015]調(diào)用調(diào)試事件請(qǐng)求管理器,并通過(guò)所述調(diào)試事件請(qǐng)求管理器將預(yù)先封裝的調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī)中。
[0016]在其中一個(gè)實(shí)施例中,所述主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息的步驟之前,所述方法還包括:
[0017]所述目標(biāo)虛擬機(jī)判斷當(dāng)前觸發(fā)的事件是否與所述注冊(cè)的事件契合,若是,則[0018]將對(duì)應(yīng)的事件實(shí)例放入所述事件隊(duì)列。
[0019]在其中一個(gè)實(shí)施例中,所述主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息的步驟包括:
[0020]通過(guò)所述調(diào)試接口調(diào)用事件隊(duì)列接口,以通過(guò)所述事件隊(duì)列接口得到事件隊(duì)列,并從所述事件隊(duì)列中取出所述調(diào)試事件請(qǐng)求對(duì)應(yīng)的事件實(shí)例;
[0021]由所述事件實(shí)例得到調(diào)試信息,并輸出所述調(diào)試信息。
[0022]一種應(yīng)用程序調(diào)試裝置,包括:
[0023]連接模塊,用于通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,目標(biāo)應(yīng)用程序運(yùn)行于所述目標(biāo)虛擬機(jī)中;
[0024]事件注冊(cè)模塊,用于將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī),所述調(diào)試事件請(qǐng)求是根據(jù)所述目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的;
[0025]處理模塊,用于主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。
[0026]在其中一個(gè)實(shí)施例中,所述連接模塊包括:
[0027]命令生成單元,用于獲取輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,以生成調(diào)試命令;
[0028]連接建立單元,用于通過(guò)生成的調(diào)試命令觸發(fā)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
[0029]在其中一個(gè)實(shí)施例中,所述事件注冊(cè)模塊還用于調(diào)用調(diào)試事件請(qǐng)求管理器,并通過(guò)調(diào)試事件請(qǐng)求管理器將預(yù)先封裝的調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī)中。
[0030]在其中一個(gè)實(shí)施例中,所述目標(biāo)虛擬機(jī)用于判斷當(dāng)前觸發(fā)的事件是否與所述注冊(cè)的事件契合,若是,則將所述對(duì)應(yīng)的事件實(shí)例放入所述事件隊(duì)列。
[0031]在其中一個(gè)實(shí)施例中,所述處理模塊包括:
[0032]實(shí)例獲取單元,用于通過(guò)所述調(diào)試接口調(diào)用事件隊(duì)列接口,以通過(guò)所述事件隊(duì)列接口得到事件隊(duì)列,并從所述事件隊(duì)列中取出調(diào)試事件請(qǐng)求對(duì)應(yīng)的事件實(shí)例;
[0033]輸出單元,用于由所述事件實(shí)例得到調(diào)試信息,并輸出所述調(diào)試信息。
[0034]上述應(yīng)用程序調(diào)試方法和裝置,通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,該目標(biāo)應(yīng)用程序便運(yùn)行于這一目標(biāo)虛擬機(jī)中,并將調(diào)試事件請(qǐng)求注冊(cè)至目標(biāo)虛擬機(jī),進(jìn)而主動(dòng)向目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)事件隊(duì)列輸出調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息,并輸出調(diào)試信息,由于調(diào)試事件請(qǐng)求是根據(jù)目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的,因此在沒(méi)有源代碼支持的情況下實(shí)現(xiàn)了目標(biāo)應(yīng)用程序的調(diào)試。
【專利附圖】

【附圖說(shuō)明】
[0035]圖1為一個(gè)實(shí)施例中應(yīng)用程序調(diào)試方法的流程圖;
[0036]圖2為圖1中通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接的方法流程圖;
[0037]圖3為另一個(gè)實(shí)施例中應(yīng)用程序調(diào)試方法的流程圖;
[0038]圖4為一個(gè)實(shí)施例中主動(dòng)向目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)事件隊(duì)列輸出調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息的方法流程圖;
[0039]圖5為一個(gè)實(shí)施例中應(yīng)用程序調(diào)試方法的運(yùn)行環(huán)境圖;[0040]圖6為一個(gè)實(shí)施例中應(yīng)用程序調(diào)試方法的時(shí)序圖;
[0041]圖7為一個(gè)實(shí)施例中應(yīng)用程序調(diào)試裝置的結(jié)構(gòu)示意圖;
[0042]圖8為圖6中連接模塊的結(jié)構(gòu)示意圖;
[0043]圖9為圖6中處理模塊的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0044]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0045]如圖1所不,在一個(gè)實(shí)施例中,一種應(yīng)用程序調(diào)試方法,包括:
[0046]步驟SI 10,通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
[0047]本實(shí)施例中,目標(biāo)應(yīng)用程序即為運(yùn)行于遠(yuǎn)端的遠(yuǎn)程環(huán)境中的各種待調(diào)試程序。調(diào)試接口是調(diào)試器對(duì)目標(biāo)應(yīng)用程序進(jìn)行調(diào)試所定義的,即JDI (Java Debug Interface, Java調(diào)試接口)。
[0048]目標(biāo)虛擬機(jī)為目標(biāo)應(yīng)用程序所在的運(yùn)行環(huán)境,如,JVM (Java Virtual Machine,Java虛擬機(jī))實(shí)例。具體的,目標(biāo)應(yīng)用程序被啟動(dòng)時(shí),將隨之產(chǎn)生JVM實(shí)例,將被啟動(dòng)的目標(biāo)應(yīng)用程序運(yùn)行于產(chǎn)生的JVM實(shí)例中。
[0049]通過(guò)調(diào)用調(diào)試接口使得調(diào)試器與遠(yuǎn)端的目標(biāo)虛擬機(jī)建立連接,使得調(diào)試器得以與遠(yuǎn)端的目標(biāo)虛擬機(jī)進(jìn)行通信,對(duì)目標(biāo)應(yīng)用程序進(jìn)行調(diào)試。
[0050]步驟S130,將調(diào)試事件請(qǐng)求注冊(cè)至目標(biāo)虛擬機(jī),該調(diào)試事件請(qǐng)求是根據(jù)目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的。
[0051]本實(shí)施例中,調(diào)試事件請(qǐng)求將是根據(jù)目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的JDI定義的、可識(shí)別的調(diào)試事件請(qǐng)求對(duì)象。其中,目標(biāo)應(yīng)用程序中存在著一個(gè)或者多個(gè)關(guān)注點(diǎn),關(guān)注點(diǎn)即為清楚目標(biāo)應(yīng)用程序中的源代碼結(jié)構(gòu)的調(diào)試人員或開(kāi)發(fā)人員為了定位特定的問(wèn)題所需要查看的目標(biāo)應(yīng)用程序中的特定位置,例如,關(guān)注點(diǎn)可以是目標(biāo)應(yīng)用程序中java代碼中某一個(gè)類的方法或者變量。
[0052]步驟S150,主動(dòng)向目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)事件隊(duì)列輸出調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。
[0053]本實(shí)施例中,由于事件隊(duì)列中的事件信息,即事件隊(duì)列所存入的事件實(shí)例是調(diào)試器所關(guān)注的,因此,調(diào)試器將主動(dòng)調(diào)用調(diào)試接口來(lái)進(jìn)行事件隊(duì)列的獲取,進(jìn)而從事件隊(duì)列中取出事件實(shí)例,以輸出調(diào)試信息。
[0054]進(jìn)一步的,調(diào)試信息則是注冊(cè)的調(diào)試事件請(qǐng)求所對(duì)應(yīng)的事件被觸發(fā)時(shí)目標(biāo)虛擬機(jī)的狀態(tài)信息,例如,注冊(cè)的調(diào)試事件請(qǐng)求被觸發(fā)時(shí)當(dāng)前堆棧中的本地變量、調(diào)用堆棧信息。
[0055]例如,目標(biāo)應(yīng)用程序運(yùn)行出錯(cuò)時(shí),該目標(biāo)應(yīng)用程序的開(kāi)發(fā)人員將通過(guò)產(chǎn)生的錯(cuò)誤提示或程序日志等信息對(duì)照本地開(kāi)發(fā)環(huán)境的源代碼可判斷得到出錯(cuò)原因?qū)⑴c目標(biāo)應(yīng)用程序中的一個(gè)java類A的第10行的變量有關(guān),則該類A的第10行即為目標(biāo)應(yīng)用程序中的一個(gè)關(guān)注點(diǎn)。
[0056]當(dāng)判斷到目標(biāo)虛擬機(jī)運(yùn)行到該類A的第10行的指令時(shí),說(shuō)明目標(biāo)虛擬機(jī)觸發(fā)的事件與注冊(cè)的調(diào)試事件請(qǐng)求相契合,此時(shí),將與該類A的第10行的指令相關(guān)的當(dāng)前堆棧中的本地變量以及調(diào)用堆棧信息等進(jìn)行處理,進(jìn)而向該目標(biāo)應(yīng)用程序的開(kāi)發(fā)人員輸出,以使得該目標(biāo)應(yīng)用程序的開(kāi)發(fā)人員獲知目標(biāo)應(yīng)用程序在運(yùn)行到該類A的第10行的指令時(shí)的狀態(tài)。
[0057]如圖2所示,在一個(gè)實(shí)施例中,上述步驟SllO包括:
[0058]步驟SI 11,獲取輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,以生成調(diào)試命令。
[0059]本實(shí)施例中,目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口用于為調(diào)試器所進(jìn)行的調(diào)試指示目標(biāo)應(yīng)用程序所在地,用于實(shí)現(xiàn)調(diào)試器與目標(biāo)虛擬機(jī)之間的連接。
[0060]步驟S113,通過(guò)生成的調(diào)試命令觸發(fā)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
[0061]本實(shí)施例中,啟動(dòng)調(diào)試器之后,將通過(guò)調(diào)試人員或者開(kāi)發(fā)人員所觸發(fā)的應(yīng)用程序調(diào)試操作得到輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,進(jìn)而調(diào)用調(diào)試接口,使得調(diào)試接口底層通過(guò)JDWP (Java調(diào)試線協(xié)議)與目標(biāo)虛擬機(jī)通訊。其中,JDWP為Java調(diào)試中的通訊交互協(xié)議,將定義了調(diào)試器和目標(biāo)虛擬機(jī)之間傳遞的信息,例如,調(diào)試命令的格式。
[0062]在一個(gè)實(shí)施例中,上述步驟S130的具體過(guò)程為:調(diào)用調(diào)試事件請(qǐng)求管理器,并通過(guò)調(diào)試事件請(qǐng)求管理器將預(yù)先封裝的調(diào)試事件請(qǐng)求注冊(cè)至目標(biāo)虛擬機(jī)中。
[0063]本實(shí)施例中,調(diào)試器將目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝為調(diào)試事件請(qǐng)求,調(diào)試事件請(qǐng)求管理器是調(diào)試接口所提供的組件,將用于對(duì)調(diào)試事件請(qǐng)求進(jìn)行統(tǒng)一管理。
[0064]為了對(duì)運(yùn)行于遠(yuǎn)端的目標(biāo)虛擬機(jī)中沒(méi)有源代碼支持的目標(biāo)應(yīng)用程序進(jìn)行調(diào)試,預(yù)先定義了目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn),由調(diào)試器封裝為調(diào)試事件請(qǐng)求,進(jìn)而由調(diào)試事件請(qǐng)求管理器將關(guān)注點(diǎn)以調(diào)試事件請(qǐng)求的方式注冊(cè)到目標(biāo)虛擬機(jī)中。例如,可將目標(biāo)虛擬機(jī)注冊(cè)線程啟動(dòng)事件請(qǐng)求(Thread Start Request)、方法進(jìn)入事件請(qǐng)求(Method EntryRequest)、方法退出事件請(qǐng)求(Method Exit Request)以及斷點(diǎn)事件請(qǐng)求(BreakpointRequest)等。
[0065]如圖3所示,在一個(gè)實(shí)施例中,上述步驟S150之前,該方法還包括如下步驟:
[0066]步驟S210,目標(biāo)虛擬機(jī)判斷當(dāng)前觸發(fā)的事件是否與注冊(cè)的調(diào)試事件請(qǐng)求相契合,若是,則進(jìn)入步驟S230,若否,則結(jié)束。
[0067]本實(shí)施例中,目標(biāo)虛擬機(jī)運(yùn)行該目標(biāo)應(yīng)用程序的過(guò)程中,將對(duì)目標(biāo)虛擬機(jī)觸發(fā)的事件與注冊(cè)的調(diào)試事件請(qǐng)求是否契合進(jìn)行判斷,即判斷當(dāng)前所運(yùn)行的源代碼是否與注冊(cè)的調(diào)試事件請(qǐng)求相符,若為是,則說(shuō)明當(dāng)前目標(biāo)虛擬機(jī)觸發(fā)的事件即為注冊(cè)的調(diào)試事件請(qǐng)求,此時(shí),進(jìn)入步驟S230以將對(duì)應(yīng)的事件實(shí)例放入事件隊(duì)列中。
[0068]步驟S230,將對(duì)應(yīng)的事件實(shí)例放入事件隊(duì)列。
[0069]如圖4所示,在一個(gè)實(shí)施例中,上述步驟S150包括:
[0070]步驟S151,通過(guò)調(diào)試接口調(diào)用事件隊(duì)列接口,以通過(guò)事件隊(duì)列接口得到事件隊(duì)列,并從事件隊(duì)列中取出調(diào)試事件請(qǐng)求對(duì)應(yīng)的事件實(shí)例。
[0071]本實(shí)施例中,事件實(shí)例包括了相應(yīng)的調(diào)試事件請(qǐng)求發(fā)生時(shí)目標(biāo)虛擬機(jī)的狀態(tài)信息,該狀態(tài)信息即為調(diào)試信息。
[0072]步驟S153,由事件實(shí)例得到調(diào)試信息,并輸出調(diào)試信息。
[0073]本實(shí)施例中,從事件實(shí)例中獲取得到調(diào)試信息,并輸出于調(diào)試器的操作界面中,以供查看,進(jìn)而根據(jù)調(diào)試信息對(duì)目標(biāo)應(yīng)用程序進(jìn)行進(jìn)一步的改進(jìn)。
[0074]下面結(jié)合一個(gè)具體的實(shí)施例來(lái)詳細(xì)闡述上述應(yīng)用程序調(diào)試方法。該實(shí)施例中,如圖5所示,如上所述的應(yīng)用程序調(diào)試方法運(yùn)行于調(diào)試器510中,并通過(guò)調(diào)用調(diào)試接口 530與位于遠(yuǎn)端的目標(biāo)虛擬機(jī)550進(jìn)行通訊。
[0075]如圖5和圖6所示,開(kāi)發(fā)人員啟動(dòng)調(diào)試器之后,將首先通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,以將調(diào)試事件請(qǐng)求注冊(cè)至目標(biāo)虛擬機(jī)中,以進(jìn)行事件隊(duì)列的獲取,即獲取相應(yīng)的事件實(shí)例,以得到調(diào)試信息并輸出。
[0076]如圖7所示,在一個(gè)實(shí)施例中,一種應(yīng)用程序調(diào)試裝置,包括連接模塊110、事件注冊(cè)模塊130和處理模塊150。
[0077]連接模塊110,用于通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,目標(biāo)應(yīng)用程序運(yùn)行于目標(biāo)虛擬機(jī)中。
[0078]本實(shí)施例中,目標(biāo)應(yīng)用程序即為運(yùn)行于遠(yuǎn)端的遠(yuǎn)程環(huán)境中的各種待調(diào)試程序。調(diào)試接口是調(diào)試器對(duì)目標(biāo)應(yīng)用程序進(jìn)行調(diào)試所定義的,即JDI。
[0079]目標(biāo)虛擬機(jī)為目標(biāo)應(yīng)用程序所在的運(yùn)行環(huán)境,如,JVM實(shí)例。具體的,目標(biāo)應(yīng)用程序被啟動(dòng)時(shí),將隨之產(chǎn)生JVM實(shí)例,將被啟動(dòng)的目標(biāo)應(yīng)用程序運(yùn)行于產(chǎn)生的JVM實(shí)例中。
[0080]連接模塊110通過(guò)調(diào)用調(diào)試接口使得調(diào)試器與遠(yuǎn)端的目標(biāo)虛擬機(jī)建立連接,使得調(diào)試器得以與遠(yuǎn)端的目標(biāo)虛擬機(jī)進(jìn)行通信,對(duì)目標(biāo)應(yīng)用程序進(jìn)行調(diào)試。
[0081]事件注冊(cè)模塊130,用于將調(diào)試事件請(qǐng)求注冊(cè)至目標(biāo)虛擬機(jī),該調(diào)試事件請(qǐng)求是根據(jù)目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的。
[0082]本實(shí)施例中,調(diào)試事件請(qǐng)求將是根據(jù)目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的JDI定義的、可識(shí)別的調(diào)試事件請(qǐng)求對(duì)象。其中,目標(biāo)應(yīng)用程序中存在著一個(gè)或者多個(gè)關(guān)注點(diǎn),關(guān)注點(diǎn)即為清楚目標(biāo)應(yīng)用程序中的源代碼結(jié)構(gòu)的調(diào)試人員或開(kāi)發(fā)人員為了定位特定的問(wèn)題所需要查看的目標(biāo)應(yīng)用程序中的特定位置,例如,關(guān)注點(diǎn)可以是目標(biāo)應(yīng)用程序中java代碼中某一個(gè)類的方法或者變量。
[0083]處理模塊150,用于主動(dòng)向目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)事件隊(duì)列輸出調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。
[0084]本實(shí)施例中,由于事件隊(duì)列中的事件信息,即事件隊(duì)列所存入的事件實(shí)例是調(diào)試器所關(guān)注的,因此,調(diào)試器將主動(dòng)調(diào)用調(diào)試接口來(lái)進(jìn)行事件隊(duì)列的獲取,進(jìn)而從事件隊(duì)列中取出事件實(shí)例,以輸出調(diào)試信息。
[0085]進(jìn)一步的,調(diào)試信息則是注冊(cè)的調(diào)試事件請(qǐng)求所對(duì)應(yīng)的事件被觸發(fā)時(shí)目標(biāo)虛擬機(jī)的狀態(tài)信息,例如,注冊(cè)的調(diào)試事件請(qǐng)求被觸發(fā)時(shí)當(dāng)前堆棧中的本地變量、調(diào)用堆棧信息。
[0086]例如,目標(biāo)應(yīng)用程序運(yùn)行出錯(cuò)時(shí),該目標(biāo)應(yīng)用程序的開(kāi)發(fā)人員將通過(guò)產(chǎn)生的錯(cuò)誤提示或程序日志等信息對(duì)照本地開(kāi)發(fā)環(huán)境的源代碼可判斷得到出錯(cuò)原因?qū)⑴c目標(biāo)應(yīng)用程序中的一個(gè)java類A的第10行的變量有關(guān),則該類A的第10行即為目標(biāo)應(yīng)用程序中的一個(gè)關(guān)注點(diǎn)。
[0087]當(dāng)判斷模塊150判斷到目標(biāo)虛擬機(jī)運(yùn)行到該類A的第10行的指令時(shí),說(shuō)明目標(biāo)虛擬機(jī)觸發(fā)的事件與注冊(cè)的調(diào)試事件請(qǐng)求相契合,此時(shí),處理模塊170將與該類A的第10行的指令相關(guān)的當(dāng)前堆棧中的本地變量以及調(diào)用堆棧信息等進(jìn)行處理,進(jìn)而向該目標(biāo)應(yīng)用程序的開(kāi)發(fā)人員輸出,以使得該目標(biāo)應(yīng)用程序的開(kāi)發(fā)人員獲知目標(biāo)應(yīng)用程序在運(yùn)行到該類A的第10行的指令時(shí)的狀態(tài)
[0088]如圖8所示,在一個(gè)實(shí)施例中,上述連接模塊110包括命令生成單元111和連接建立單元113。[0089]命令生成單元111,用于獲取輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,以生成調(diào)試命令。
[0090]本實(shí)施例中,目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口用于為調(diào)試器所進(jìn)行的調(diào)試指示目標(biāo)應(yīng)用程序所在地,用于實(shí)現(xiàn)調(diào)試器與目標(biāo)虛擬機(jī)之間的連接。
[0091]連接建立單元113,用于通過(guò)生成的調(diào)試命令觸發(fā)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
[0092]本實(shí)施例中,啟動(dòng)調(diào)試器之后,命令生成單元111將通過(guò)調(diào)試人員或者開(kāi)發(fā)人員所觸發(fā)的應(yīng)用程序調(diào)試操作得到輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,連接建立單元113調(diào)用調(diào)試接口,使得調(diào)試接口底層通過(guò)JDWP與目標(biāo)虛擬機(jī)通訊。其中,JDffP為Java調(diào)試中的通訊交互協(xié)議,將定義了調(diào)試器和目標(biāo)虛擬機(jī)之間傳遞的信息,例如,調(diào)試命令的格式。
[0093]在一個(gè)實(shí)施例中,上述事件注冊(cè)模塊130還用于調(diào)用調(diào)試事件請(qǐng)求管理器,并通過(guò)調(diào)試事件請(qǐng)求管理器將預(yù)先封裝的調(diào)試事件請(qǐng)求注冊(cè)至目標(biāo)虛擬機(jī)中。
[0094]本實(shí)施例中,調(diào)試器將目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝為調(diào)試事件請(qǐng)求,調(diào)試事件請(qǐng)求管理器是調(diào)試接口所提供的組件,將用于對(duì)調(diào)試事件請(qǐng)求進(jìn)行統(tǒng)一管理。
[0095]為了對(duì)運(yùn)行于遠(yuǎn)端的目標(biāo)虛擬機(jī)中沒(méi)有源代碼支持的目標(biāo)應(yīng)用程序進(jìn)行調(diào)試,預(yù)先定義了目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn),由調(diào)試器封裝為調(diào)試事件請(qǐng)求,進(jìn)而由調(diào)試事件請(qǐng)求管理器將關(guān)注點(diǎn)以調(diào)試事件請(qǐng)求的方式注冊(cè)到目標(biāo)虛擬機(jī)中。例如,可將目標(biāo)虛擬機(jī)注冊(cè)線程啟動(dòng)事件請(qǐng)求、方法進(jìn)入事件請(qǐng)求、方法退出事件請(qǐng)求以及斷點(diǎn)事件請(qǐng)求等。
[0096]在一個(gè)實(shí)施例中,該目標(biāo)虛擬機(jī)用于判斷當(dāng)前觸發(fā)的事件是否與注冊(cè)的調(diào)試事件請(qǐng)求相契合,若是,則將對(duì)應(yīng)的事件實(shí)例放入事件隊(duì)列,若否,則停止執(zhí)行。
[0097]本實(shí)施例中,目標(biāo)虛擬機(jī)運(yùn)行該目標(biāo)應(yīng)用程序的過(guò)程中,將對(duì)目標(biāo)虛擬機(jī)觸發(fā)的事件與注冊(cè)的調(diào)試事件請(qǐng)求是否契合進(jìn)行判斷,即判斷當(dāng)前所運(yùn)行的源代碼是否與注冊(cè)的調(diào)試事件請(qǐng)求相符,若為是,則說(shuō)明當(dāng)前目標(biāo)虛擬機(jī)觸發(fā)的事件即為注冊(cè)的調(diào)試事件請(qǐng)求,此時(shí),將對(duì)應(yīng)的事件實(shí)例放入事件隊(duì)列中。
[0098]如圖9所示,在一個(gè)實(shí)施例中,上述處理模塊150包括實(shí)例獲取單元151和輸出單元 153。
[0099]實(shí)例獲取單元151,用于通過(guò)調(diào)試接口調(diào)用事件隊(duì)列接口,以通過(guò)事件隊(duì)列接口得到事件隊(duì)列,并從事件隊(duì)列中取出調(diào)試事件請(qǐng)求對(duì)應(yīng)的事件實(shí)例。
[0100]本實(shí)施例中,事件實(shí)例包括了相應(yīng)的調(diào)試事件請(qǐng)求發(fā)生時(shí)目標(biāo)虛擬機(jī)的狀態(tài)信息,該狀態(tài)信息即為調(diào)試信息。
[0101]輸出單元153,用于由事件實(shí)例得到調(diào)試信息,并輸出調(diào)試信息。
[0102]本實(shí)施例中,輸出單元153從事件實(shí)例中獲取得到調(diào)試信息,并輸出于調(diào)試器的操作界面中,以供查看,進(jìn)而根據(jù)調(diào)試信息對(duì)目標(biāo)應(yīng)用程序進(jìn)行進(jìn)一步的改進(jìn)。
[0103]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random AccessMemory, RAM)等。[0104]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種應(yīng)用程序調(diào)試方法,包括如下步驟: 通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,目標(biāo)應(yīng)用程序運(yùn)行于所述目標(biāo)虛擬機(jī)中; 將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī),所述調(diào)試事件請(qǐng)求是根據(jù)所述目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的; 主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接的步驟包括: 獲取輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,以生成調(diào)試命令; 通過(guò)生成的調(diào)試命令觸發(fā)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī)的步驟包括: 調(diào)用調(diào)試事件請(qǐng)求管理器,并通過(guò)所述調(diào)試事件請(qǐng)求管理器將預(yù)先封裝的調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī)中。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息的步驟之前,所述方法還包括: 所述目標(biāo)虛擬機(jī)判斷當(dāng)前觸發(fā)的事件是否與所述注冊(cè)的調(diào)試事件請(qǐng)求契合,若是,則 將對(duì)應(yīng)的事件實(shí)例放入所述事件隊(duì)列。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息的步驟包括: 通過(guò)所述調(diào)試接口調(diào)用事件隊(duì)列接口,以通過(guò)所述事件隊(duì)列接口得到事件隊(duì)列,并從所述事件隊(duì)列中取出所述調(diào)試事件請(qǐng)求對(duì)應(yīng)的事件實(shí)例; 由所述事件實(shí)例得到調(diào)試信息,并輸出所述調(diào)試信息。
6.一種應(yīng)用程序調(diào)試裝置,其特征在于,包括: 連接模塊,用于通過(guò)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接,目標(biāo)應(yīng)用程序運(yùn)行于所述目標(biāo)虛擬機(jī)中; 事件注冊(cè)模塊,用于將調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī),所述調(diào)試事件請(qǐng)求是根據(jù)所述目標(biāo)應(yīng)用程序中的關(guān)注點(diǎn)封裝得到的; 處理模塊,用于主動(dòng)向所述目標(biāo)虛擬機(jī)獲取事件隊(duì)列,以通過(guò)所述事件隊(duì)列輸出所述調(diào)試事件請(qǐng)求所對(duì)應(yīng)的調(diào)試信息。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述連接模塊包括: 命令生成單元,用于獲取輸入的目標(biāo)虛擬機(jī)對(duì)應(yīng)的地址和調(diào)試端口,以生成調(diào)試命令; 連接建立單元,用于通過(guò)生成的調(diào)試命令觸發(fā)調(diào)用調(diào)試接口與目標(biāo)虛擬機(jī)建立連接。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述事件注冊(cè)模塊還用于調(diào)用調(diào)試事件請(qǐng)求管理器,并通過(guò)調(diào)試事件請(qǐng)求管理器將預(yù)先封裝的調(diào)試事件請(qǐng)求注冊(cè)至所述目標(biāo)虛擬機(jī)中。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述目標(biāo)虛擬機(jī)用于判斷當(dāng)前觸發(fā)的事件是否與所述注冊(cè)的事件契合,若是,則將所述對(duì)應(yīng)的事件實(shí)例放入所述事件隊(duì)列。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述處理模塊包括: 實(shí)例獲取單元,用于通過(guò)所述調(diào)試接口調(diào)用事件隊(duì)列接口,以通過(guò)所述事件隊(duì)列接口得到事件隊(duì)列,并從所述事件隊(duì)列中取出調(diào)試事件請(qǐng)求對(duì)應(yīng)的事件實(shí)例; 輸出單元,用于由所述事件實(shí)例得到調(diào)試信息,并輸出所述調(diào)試信息。
【文檔編號(hào)】G06F11/36GK103699485SQ201310714540
【公開(kāi)日】2014年4月2日 申請(qǐng)日期:2013年12月20日 優(yōu)先權(quán)日:2013年12月20日
【發(fā)明者】高榮玉, 李家鳳, 劉繼云 申請(qǐng)人:金蝶軟件(中國(guó))有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1