專利名稱:嵌入式遠(yuǎn)程調(diào)試器端jdwp通訊連接代理實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式移動(dòng)設(shè)備相應(yīng)軟件開發(fā)的調(diào)試技術(shù)領(lǐng)域,特別是涉及嵌入 式遠(yuǎn)程調(diào)試器端JDWP通訊連接代理實(shí)現(xiàn)方法,也可用于普通Java類軟件的調(diào) 試組件之一。
背景技術(shù):
科技的發(fā)展永遠(yuǎn)都要通過技術(shù)創(chuàng)新來(lái)實(shí)現(xiàn),而技術(shù)創(chuàng)新是沒有盡頭的。隨 著中國(guó)日漸成為世界最大的移動(dòng)通訊與應(yīng)用市場(chǎng),移動(dòng)增值應(yīng)用服務(wù)迅速崛起, 這應(yīng)該就是繼互聯(lián)網(wǎng)之后最大的商機(jī)。智能手機(jī)在世界及中國(guó)的市場(chǎng)份額不斷 快速增長(zhǎng),各種創(chuàng)新手機(jī)軟件的開發(fā)和應(yīng)用正是推動(dòng)移動(dòng)增值服務(wù)市場(chǎng)不斷發(fā) 展前進(jìn)的動(dòng)力來(lái)源,手機(jī)軟件開發(fā)漸入成熟。目前,手機(jī)游戲業(yè)務(wù),手機(jī)增值 業(yè)務(wù),移動(dòng)商務(wù)應(yīng)用等領(lǐng)域正處于迅猛發(fā)展的階段。各大游戲公司,大型娛樂 網(wǎng)站,門戶網(wǎng)站,電子商務(wù),甚至到企業(yè)應(yīng)用,報(bào)刊媒體,電視廣播等機(jī)構(gòu)都 大力推出自己的移動(dòng)業(yè)務(wù)。而即將到來(lái)的下一代通訊技術(shù)更是讓移動(dòng)軟件開發(fā) 成為市場(chǎng)上份額最大的產(chǎn)業(yè)之一。
J2ME是目前技術(shù)開發(fā)的主體,其他市場(chǎng)需要的技術(shù)還有SYMBIANC++, WINDOWS MOBILE/CE C++。由于J2ME的技術(shù)先進(jìn),而且又能跨平臺(tái)運(yùn)行, 因此受到了眾多手機(jī)廠家的支持,甚至成為現(xiàn)在用戶購(gòu)買手機(jī)的一項(xiàng)比較重要 的技術(shù)指標(biāo)。所以到目前為止,手機(jī)的游戲應(yīng)用平臺(tái)中,以支持J2ME的最多,
而且J2ME軟件開發(fā)商也有越來(lái)越多的趨勢(shì),J2ME已成為2002年下半年之后
的行動(dòng)游戲平臺(tái)主流。尤其在進(jìn)入04年之后,基于JSR184的Mobile 3D Graphics API for J2ME的3D游戲開始出現(xiàn),像索愛S700/K700/Z500以及西門子S65等 新機(jī)都開始支持在手機(jī)上運(yùn)行3D JAVA游戲。
phoneME是SUN Open Source Java中的一個(gè)重要項(xiàng)目,包含了 CLDC和CDC 的HotSpot實(shí)現(xiàn)以及多個(gè)JSR。相比起以前能下載到的RI, phoneME是一個(gè)真 正經(jīng)歷過眾多實(shí)際產(chǎn)品驗(yàn)證的,商業(yè)級(jí)的JavaME實(shí)現(xiàn)。運(yùn)行phoneME到當(dāng)代 的手機(jī)上便是自然而然的事。同時(shí),以J2ME平臺(tái)開發(fā)的程序叫做MIDlet,可 以直接從在線下載后離線運(yùn)行,或從PC通過數(shù)據(jù)線、紅外或者藍(lán)牙傳輸?shù)绞謾C(jī) 上。由于J2ME程序都很小,只有幾十K,所以又被稱為K-JAVA。由于K-JAVA (J2ME)是開放平臺(tái),因此任何程序設(shè)計(jì)師甚至程序編寫愛好者都能到Sim網(wǎng) 站下載J2ME開發(fā)工具,為手機(jī)寫JAVA程序。然而Sun網(wǎng)站上的開發(fā)工具或 多或少存在一些問題,如配置復(fù)雜,專用性不足以及平臺(tái)不能得到快速更新; 尤其是對(duì)一個(gè)需要推出新的手機(jī)、新的平臺(tái)的企業(yè)來(lái)說,就要開發(fā)自己版本的 開發(fā)平臺(tái)。
調(diào)試工具是開發(fā)平臺(tái)中的不可缺少的一部分。每個(gè)開發(fā)人員都應(yīng)該使用調(diào)試 器或調(diào)試工具。調(diào)試器可以讓您單步調(diào)試代碼、凍結(jié)輸出并檢查變量。調(diào)試工 具可以幫助有經(jīng)驗(yàn)的開發(fā)人員更迅速地找到發(fā)生問題的位置。本軟件集就是基 于以上背景和技術(shù)條件下開發(fā)的MIDlet調(diào)試軟件。Debugger是MIDlet開發(fā)平 臺(tái)中的一個(gè)必不可或缺的開發(fā)工具,因此開發(fā)這樣的調(diào)試工具是必要的。本通 訊連接代理就是基于這種背景下實(shí)現(xiàn)的一個(gè)功能組件,他幫助普通調(diào)試器與調(diào)
試代理或者虛擬機(jī)建立起JDWP連接。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種嵌入式遠(yuǎn)程調(diào)試軟件中調(diào)試器(Debugger)端 JDWP通訊連接代理(ConnectionAgent)實(shí)現(xiàn)方法。
本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下
1) 建立JDWP連接
本連接代理依附于Debugger,是與debug agent或者虛擬機(jī)建立JDWP連接 的連接代理組件之一??芍苯邮躂DI (JavaDebug Interface)包的調(diào)用,與debug agent建立JDWP握手后,既能向?qū)Ψ桨l(fā)送命令數(shù)據(jù)包,等待對(duì)方的響應(yīng)。同時(shí) 也能接收對(duì)方發(fā)過來(lái)的命令數(shù)據(jù)包,等KVM響應(yīng)后以應(yīng)答數(shù)據(jù)包的方式發(fā)回對(duì)方。
2) 提供標(biāo)準(zhǔn)化的接口給上層
可以受sim的JDI包直接調(diào)用,也可被其他標(biāo)準(zhǔn)的調(diào)試器所調(diào)用,即支持多 種調(diào)試器的能力,即被調(diào)用的接口標(biāo)準(zhǔn)化。
3) 同時(shí)支持socket通訊方式和共享內(nèi)存方式
盡管socket通訊是首要的,增加了可移植性,但本JDWP端通訊連接代理實(shí) 現(xiàn)方法同時(shí)支持了 windows中的簡(jiǎn)單共享內(nèi)存的方式進(jìn)行JDWP連接,主要原 因是在windows系統(tǒng)中基于共享內(nèi)存的實(shí)現(xiàn)最常用的,而debugger與debug agent 總是運(yùn)行在windows PC上;這與依附于debug agent的JDWP連接管理器相對(duì) 應(yīng)。即他們的通信必須使用相同的方式。
4) 具有緩存和包丟失重發(fā)功能
簡(jiǎn)單地增加系統(tǒng)的可靠性,這也是網(wǎng)絡(luò)連接必須要的功能之一。
本發(fā)明與背景技術(shù)相結(jié)合,具有的有益的效果是
本發(fā)明是一種嵌入式遠(yuǎn)程調(diào)試軟件中調(diào)試器(Debugger)端JDWP通訊連 接代理(ConnectionAgent)實(shí)現(xiàn)方法,其主要功能是對(duì)debugger提供JDWP通 訊協(xié)議的實(shí)現(xiàn),以對(duì)JAVA虛擬機(jī)軟件實(shí)現(xiàn)調(diào)試的能力。
(1) 獨(dú)立性。本方法實(shí)現(xiàn)了在嵌入式軟件調(diào)試的JDWP通訊連接代理 (ConnectionAgent),即通訊格式標(biāo)準(zhǔn)化,與調(diào)試器或者調(diào)試代理只采用標(biāo)準(zhǔn)化
的通訊方式。因此具有架構(gòu)清晰,各組件相對(duì)獨(dú)立的優(yōu)點(diǎn),也是實(shí)現(xiàn)遠(yuǎn)程調(diào)試 的基礎(chǔ)。因此,只要遵循JDWP協(xié)議的調(diào)試器都與本通訊連接代理兼容。
(2) 簡(jiǎn)單性。本嵌入式軟件調(diào)試的JDWP通訊連接代理(ConnectionAgent) 具有界面良好,層次化清晰,架構(gòu)簡(jiǎn)單的特性,而且提供了兩種通訊方式,方 便使用。
圖1是本發(fā)明實(shí)施過程流程圖;
具體實(shí)施例方式
本發(fā)明是一種嵌入式遠(yuǎn)程調(diào)試軟件中調(diào)試器(Debugger)端JDWP通訊連 接代理(ConnectionAgent)實(shí)現(xiàn)方法,本連接管理器依附于debugger,建立起 與debug agent或者虛擬機(jī)端的JDWP連接。因此,來(lái)自debug agent或者虛擬機(jī) 端的數(shù)據(jù)包和發(fā)至debug agent或者虛擬機(jī)端的數(shù)據(jù)包都有它來(lái)管理。
下面結(jié)合圖1說明其具體實(shí)施過程。
1)建立JDWP連接
依附于Debugger,通過JDI (Java Debug Interface)包的調(diào)用來(lái)實(shí)現(xiàn)通訊功能, 與debug agent或者虛擬機(jī)建立JDWP連接,實(shí)現(xiàn)數(shù)據(jù)包的交換。 JDWP數(shù)據(jù)包有兩種基本的格式,即命令數(shù)據(jù)包(commandpackets)和應(yīng)答數(shù) 據(jù)包(replypackets)。由于命令數(shù)據(jù)包需要被任意的一端所發(fā)送,所以本通訊連 接代理也具備了同時(shí)處理這兩種數(shù)據(jù)包的能力。命令數(shù)據(jù)包是一次交互的發(fā)起
者,應(yīng)答數(shù)據(jù)包是對(duì)這個(gè)命令的回應(yīng),基本上是一一對(duì)應(yīng)關(guān)系。 數(shù)據(jù)包格式如下-
命令數(shù)據(jù)包(Command Packet)
Length (4 bytes)
Id (4 bytes) Flags (1 bytes) Command set (1 bytes) Command (1 bytes) Data (Variable)
應(yīng)答數(shù)據(jù)包(Replay Packet)
Length (4 bytes) Id (4 bytes) Flag (1 bytes) Error code ( 2 bytes ) data (Variable)
所有數(shù)據(jù)包的域采用大頭格式(big-endian format),前三個(gè)域的意義在兩種數(shù)據(jù) 包中是一樣的,兩種數(shù)據(jù)包的大小總是一樣的。因此本發(fā)明簡(jiǎn)單地實(shí)現(xiàn)了兩種 數(shù)據(jù)包的一致通訊方式,大大簡(jiǎn)化了 debug通訊端的設(shè)計(jì)。 2)被調(diào)用接口標(biāo)準(zhǔn)化
可以受sun的JDI包直接調(diào)用,也可被其他標(biāo)準(zhǔn)的調(diào)試器所調(diào)用,即支持多 種調(diào)試器的能力。
在實(shí)施過程中,所有呈現(xiàn)出來(lái)的API都符合UEI標(biāo)準(zhǔn),因此,凡是符合這以 標(biāo)準(zhǔn)的IDE都可以使用本發(fā)明來(lái)實(shí)現(xiàn)遠(yuǎn)程調(diào)試的功能。
3) 同時(shí)支持socket通訊方式和共享內(nèi)存方式
與依附于debug agent端的連接管理器相對(duì)于,盡管socket通訊是首要的,增 加了可移植性,但本JDWP端通訊連接代理實(shí)現(xiàn)方法同時(shí)支持了 windows中的 簡(jiǎn)單共享內(nèi)存的方式進(jìn)行JDWP連接,主要原因是在windows系統(tǒng)中基于共享 內(nèi)存的實(shí)現(xiàn)最常用的,而debugger與debug agent總是運(yùn)行在windows PC上。
4) 具有緩存和包丟失重發(fā)功能
可以實(shí)現(xiàn)異步通信,增加通訊效率,都是緩存機(jī)制帶來(lái)的好處。另外由于通訊
上的原因,當(dāng)對(duì)方(如前述,虛擬機(jī)KVM或者debug代理)發(fā)生丟包,或者重
復(fù)發(fā)包的情況,能夠正確處理,簡(jiǎn)單地增加系統(tǒng)的可靠性。
實(shí)施過程中,首先是建立一個(gè)會(huì)話,類似數(shù)據(jù)庫(kù)中的事務(wù)概念,這樣保證避免
了數(shù)據(jù)命令和數(shù)據(jù)回復(fù)出現(xiàn)張冠李戴的現(xiàn)象。當(dāng)一個(gè)會(huì)話未結(jié)束前所有的數(shù)據(jù)
都會(huì)保留下來(lái)。當(dāng)一些外部組件再次請(qǐng)求這些信息時(shí),都可以實(shí)現(xiàn)數(shù)據(jù)重發(fā)的能力。
其次在會(huì)話的范圍內(nèi),對(duì)各個(gè)數(shù)據(jù)包進(jìn)行標(biāo)號(hào),實(shí)現(xiàn)數(shù)據(jù)發(fā)送的緩沖能力。 同時(shí)對(duì)每一個(gè)數(shù)據(jù)包進(jìn)行獨(dú)一無(wú)二檢驗(yàn),即消除重包現(xiàn)象;對(duì)每一個(gè)數(shù)據(jù)包進(jìn) 行計(jì)時(shí)老化操作,實(shí)現(xiàn)數(shù)據(jù)包的超時(shí)消除。
權(quán)利要求
1、一種嵌入式遠(yuǎn)程調(diào)試器端JDWP通訊連接代理實(shí)現(xiàn)方法,其特征在于,包括1)建立JDWP連接依附于Debugger,直接受JDI(Java Debug Interface)包的調(diào)用,與debugagent建立JDWP連接;2)被調(diào)用接口標(biāo)準(zhǔn)化可以受sun的JDI包直接調(diào)用,也可被其他標(biāo)準(zhǔn)的調(diào)試器所調(diào)用,即支持多種調(diào)試器的能力;3)同時(shí)支持socket通訊方式和共享內(nèi)存方式同時(shí)支持windows中的簡(jiǎn)單共享內(nèi)存的方式進(jìn)行JDWP連接,在windows系統(tǒng)中基于共享內(nèi)存的實(shí)現(xiàn)最常用的,而debugger與debug agent總是運(yùn)行在windows PC上;4)緩存和包丟失重發(fā),增加系統(tǒng)的可靠性。
全文摘要
本發(fā)明涉及嵌入式移動(dòng)設(shè)備相應(yīng)軟件開發(fā)的調(diào)試技術(shù)領(lǐng)域,旨在提供一種嵌入式遠(yuǎn)程調(diào)試器端JDWP通訊連接代理實(shí)現(xiàn)方法。該方法包括建立JDWP連接、被調(diào)用接口標(biāo)準(zhǔn)化、同時(shí)支持socket通訊方式和共享內(nèi)存方式、緩存和包丟失重發(fā),增加系統(tǒng)的可靠性。本發(fā)明主要功能是對(duì)debugger提供JDWP通訊協(xié)議的實(shí)現(xiàn),以對(duì)JAVA虛擬機(jī)軟件實(shí)現(xiàn)調(diào)試的能力,具有獨(dú)立性和簡(jiǎn)單性的優(yōu)點(diǎn)。
文檔編號(hào)G06F11/36GK101349992SQ200810120950
公開日2009年1月21日 申請(qǐng)日期2008年9月18日 優(yōu)先權(quán)日2008年9月18日
發(fā)明者嚴(yán)力科, 鑫 劉, 俊 吳, 施青松, 歐陽(yáng)雷, 羅尚虎, 威 胡, 蔣冠軍, 劍 陳, 陳天洲 申請(qǐng)人:浙江大學(xué)