本發(fā)明涉及OSGi平臺(tái)技術(shù)領(lǐng)域,尤其涉及的是基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法及系統(tǒng)。
背景技術(shù):
當(dāng)前的軟件系統(tǒng)在實(shí)際運(yùn)行過(guò)程中,常常會(huì)暴露出設(shè)計(jì)與實(shí)現(xiàn)中埋入的問(wèn)題;而定位和調(diào)式這些運(yùn)行過(guò)程中發(fā)現(xiàn)的問(wèn)題,顯得非常困難;盡管基于JVM(Java Virtual Machine,即Java虛擬機(jī))的軟件系統(tǒng)有許多有利的條件,特別是基于OSGi技術(shù)(Open Service Gateway Initiative,即開(kāi)放服務(wù)網(wǎng)關(guān)協(xié)議,其是Java動(dòng)態(tài)化模塊化系統(tǒng)的一系列規(guī)范)開(kāi)發(fā)的軟件系統(tǒng)為動(dòng)態(tài)調(diào)式帶來(lái)諸多優(yōu)勢(shì)條件,但是實(shí)際中仍然依賴如下的兩個(gè)方法:
1)將JVM開(kāi)啟調(diào)試模式并借助IDE(Integrated Development Environment,即集成開(kāi)發(fā)環(huán)境)工具打斷點(diǎn)的方式;這種方法可以對(duì)照代碼的執(zhí)行順序得到程序中每個(gè)變量和運(yùn)行軌跡,但是在正常運(yùn)行的生產(chǎn)環(huán)境是無(wú)法通過(guò)斷點(diǎn)進(jìn)行運(yùn)行的;即使是啟動(dòng)時(shí)候打開(kāi)遠(yuǎn)程調(diào)式端口,因存在安全隱患和運(yùn)行效率的問(wèn)題,也是不接受的;因此這種方式在生產(chǎn)環(huán)境一般受到限制。
2)借助第三方付費(fèi)軟件對(duì)字節(jié)碼進(jìn)行修改的方式;但是商業(yè)軟件一般費(fèi)用較高和使用的技術(shù)問(wèn)題,很難規(guī)?;\(yùn)用。
因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法及系統(tǒng),旨在解決現(xiàn)有技術(shù)中JVM開(kāi)啟調(diào)試模式并借助IDE工具打斷點(diǎn)的方式因安全性及運(yùn)行效率均低下的缺陷。
本發(fā)明的技術(shù)方案如下:
一種基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法,其中,所述方法包括以下步驟:
A、初始化安裝腳本語(yǔ)言庫(kù),并在OSGi服務(wù)端初始化安裝OSGi執(zhí)行腳本語(yǔ)言命令行插件;其中,所述OSGi執(zhí)行腳本語(yǔ)言命令行插件用于捕獲控制臺(tái)輸入,并調(diào)用腳本程序;
B、當(dāng)通過(guò)OSGi執(zhí)行腳本語(yǔ)言命令行插件捕獲到腳本程序時(shí),在控制臺(tái)中執(zhí)行調(diào)試程序?qū)δ_本程序進(jìn)行調(diào)試,當(dāng)完成調(diào)試時(shí)判斷是否卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件;
C、當(dāng)需卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件時(shí),則對(duì)所述OSGi執(zhí)行腳本語(yǔ)言命令行插件進(jìn)行卸載。
所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法,其中,所述腳本語(yǔ)言庫(kù)為Groovy語(yǔ)言庫(kù)、JRuby語(yǔ)言庫(kù)或Scala語(yǔ)言庫(kù)。
所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法,其中,所述步驟B中腳本程序可實(shí)時(shí)進(jìn)行修改,并在修改完成且保存后由調(diào)試程序再次調(diào)用進(jìn)行調(diào)試。
所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法,其中,所述步驟B中當(dāng)根據(jù)腳本程序得到待調(diào)試的對(duì)象后,對(duì)待調(diào)試的對(duì)象所包括屬性值進(jìn)行顯示,并將待調(diào)試的對(duì)象打印到控制臺(tái)。
一種基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng),其中,包括:
初始化模塊,用于初始化安裝腳本語(yǔ)言庫(kù),并在OSGi服務(wù)端初始化安裝OSGi執(zhí)行腳本語(yǔ)言命令行插件;其中,所述OSGi執(zhí)行腳本語(yǔ)言命令行插件用于捕獲控制臺(tái)輸入,并調(diào)用腳本程序;
調(diào)試檢測(cè)模塊,用于當(dāng)通過(guò)OSGi執(zhí)行腳本語(yǔ)言命令行插件捕獲到腳本程序時(shí),在控制臺(tái)中執(zhí)行調(diào)試程序?qū)δ_本程序進(jìn)行調(diào)試,當(dāng)完成調(diào)試時(shí)判斷是否卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件;
卸載模塊,用于當(dāng)需卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件時(shí),則對(duì)所述OSGi執(zhí)行腳本語(yǔ)言命令行插件進(jìn)行卸載。
所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng),其中,所述腳本語(yǔ)言庫(kù)為Groovy語(yǔ)言庫(kù)、JRuby語(yǔ)言庫(kù)或Scala語(yǔ)言庫(kù)。
所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng),其中,所述調(diào)試檢測(cè)模塊中腳本程序可實(shí)時(shí)進(jìn)行修改,并在修改完成且保存后由調(diào)試程序再次調(diào)用進(jìn)行調(diào)試。
所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng),其中,所述調(diào)試檢測(cè)模塊中當(dāng)根據(jù)腳本程序得到待調(diào)試的對(duì)象后,對(duì)待調(diào)試的對(duì)象所包括屬性值進(jìn)行顯示,并將待調(diào)試的對(duì)象打印到控制臺(tái)。
本發(fā)明所提供的基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法及系統(tǒng),方法包括:初始化安裝腳本語(yǔ)言庫(kù),并在OSGi服務(wù)端初始化安裝OSGi執(zhí)行腳本語(yǔ)言命令行插件;當(dāng)通過(guò)OSGi執(zhí)行腳本語(yǔ)言命令行插件捕獲到腳本程序時(shí),在控制臺(tái)中執(zhí)行調(diào)試程序?qū)δ_本程序進(jìn)行調(diào)試,當(dāng)完成調(diào)試時(shí)判斷是否卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件;當(dāng)需卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件時(shí),則對(duì)所述OSGi執(zhí)行腳本語(yǔ)言命令行插件進(jìn)行卸載。本發(fā)明通過(guò)編寫腳本程序,依賴OSGi的熱拔插和基于服務(wù)查找特性,實(shí)現(xiàn)調(diào)試腳本獨(dú)立于被調(diào)試程序,而運(yùn)行時(shí)獲取被調(diào)試系統(tǒng)上下文的及時(shí)編譯及時(shí)使用。
附圖說(shuō)明
圖1為本發(fā)明所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法較佳實(shí)施例的流程圖。
圖2為本發(fā)明所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng)較佳實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
本發(fā)明提供一種基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法及系統(tǒng),為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,為本發(fā)明所述通訊信息隱藏實(shí)現(xiàn)方法較佳實(shí)施例的流程圖,所述方法包括以下步驟:
步驟S100、初始化安裝腳本語(yǔ)言庫(kù),并在OSGi服務(wù)端初始化安裝OSGi執(zhí)行腳本語(yǔ)言命令行插件;其中,所述OSGi執(zhí)行腳本語(yǔ)言命令行插件用于捕獲控制臺(tái)輸入,并調(diào)用腳本程序;
步驟S200、當(dāng)通過(guò)OSGi執(zhí)行腳本語(yǔ)言命令行插件捕獲到腳本程序時(shí),在控制臺(tái)中執(zhí)行調(diào)試程序?qū)δ_本程序進(jìn)行調(diào)試,當(dāng)完成調(diào)試時(shí)判斷是否卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件;
步驟S300、當(dāng)需卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件時(shí),則對(duì)所述OSGi執(zhí)行腳本語(yǔ)言命令行插件進(jìn)行卸載。
本發(fā)明的實(shí)施例中,當(dāng)OSGi執(zhí)行腳本語(yǔ)言命令行插件是利用OSGi平臺(tái)的熱插拔的特性進(jìn)行安裝或卸載。OSGi執(zhí)行腳本語(yǔ)言命令行插件可以在需要使用的時(shí)候安裝,完成調(diào)試以后移除而不影響原有系統(tǒng)的正常運(yùn)行。
本發(fā)明中還利用腳本語(yǔ)言(尤其是解釋性腳本語(yǔ)言)的特性,在修改代碼時(shí)無(wú)需編譯即可即時(shí)生效,提升診斷和調(diào)試的效率,節(jié)省定位問(wèn)題的時(shí)間。
而且,在不改變腳本語(yǔ)言原有字節(jié)碼的基礎(chǔ)上通過(guò)腳本語(yǔ)言的元編程特性,可以查看對(duì)象內(nèi)部的數(shù)據(jù)結(jié)構(gòu)和對(duì)原有的對(duì)象織入代碼。
可見(jiàn),本發(fā)明實(shí)現(xiàn)了方便快捷的對(duì)系統(tǒng)(即OSGi服務(wù)端)進(jìn)行診斷調(diào)試,無(wú)需重啟系統(tǒng),熱拔插的方式對(duì)運(yùn)行的系統(tǒng)增加/刪除調(diào)試模塊;也不影響生產(chǎn)環(huán)境下用戶的使用,診斷用的腳本程序是即時(shí)生效的,最大化提升診斷效率;不對(duì)原有系統(tǒng)的類文件進(jìn)行修改,靈活查看運(yùn)行時(shí)用戶數(shù)據(jù)和插入調(diào)試代碼, 可以防止調(diào)試程序時(shí)引入新的問(wèn)題。
進(jìn)一步的,所述腳本語(yǔ)言庫(kù)為Groovy語(yǔ)言庫(kù)、JRuby語(yǔ)言庫(kù)或Scala語(yǔ)言庫(kù)。
其中,Groovy是用于Java虛擬機(jī)的一種敏捷的動(dòng)態(tài)語(yǔ)言,它是一種成熟的面向?qū)ο缶幊陶Z(yǔ)言,既可以用于面向?qū)ο缶幊蹋挚梢杂米骷兇獾哪_本語(yǔ)言。使用該種語(yǔ)言不必編寫過(guò)多的代碼,同時(shí)又具有閉包和動(dòng)態(tài)語(yǔ)言中的其他特性。
JRuby是面向Ruby、基于Java虛擬機(jī)(JVM)的一種解釋程序,它結(jié)合了Ruby語(yǔ)言的簡(jiǎn)易性和功能強(qiáng)大的JVM的執(zhí)行機(jī)制,包括與Java庫(kù) 全面集成。
Scala是一門多范式的編程語(yǔ)言,一種類似java的編程語(yǔ)言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語(yǔ)言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala可以與Java互操作。它用scalac這個(gè)編譯器把源文件編譯成Java的class文件(即在JVM上運(yùn)行的字節(jié)碼)??梢詮腟cala中調(diào)用所有的Java類庫(kù),也同樣可以從Java應(yīng)用程序中調(diào)用Scala的代碼。
優(yōu)選的,所述步驟S200中腳本程序可實(shí)時(shí)進(jìn)行修改,并在修改完成且保存后由調(diào)試程序再次調(diào)用進(jìn)行調(diào)試。
優(yōu)選的,所述步驟S200中當(dāng)根據(jù)腳本程序得到待調(diào)試的對(duì)象后,對(duì)待調(diào)試的對(duì)象所包括屬性值進(jìn)行顯示,并將待調(diào)試的對(duì)象打印到控制臺(tái)。
基于上述方法實(shí)施例,本發(fā)明還提供一種基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)。如圖2所示,所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng)包括:
初始化模塊100,用于初始化安裝腳本語(yǔ)言庫(kù),并在OSGi服務(wù)端初始化安裝OSGi執(zhí)行腳本語(yǔ)言命令行插件;其中,所述OSGi執(zhí)行腳本語(yǔ)言命令行插件用于捕獲控制臺(tái)輸入,并調(diào)用腳本程序;
調(diào)試檢測(cè)模塊200,用于當(dāng)通過(guò)OSGi執(zhí)行腳本語(yǔ)言命令行插件捕獲到腳本程序時(shí),在控制臺(tái)中執(zhí)行調(diào)試程序?qū)δ_本程序進(jìn)行調(diào)試,當(dāng)完成調(diào)試時(shí)判斷是否卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件;
卸載模塊300,用于當(dāng)需卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件時(shí),則對(duì)所述OSGi執(zhí)行腳本語(yǔ)言命令行插件進(jìn)行卸載。
優(yōu)選的,在所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng)中,所述腳本語(yǔ)言庫(kù)為Groovy語(yǔ)言庫(kù)、JRuby語(yǔ)言庫(kù)或Scala語(yǔ)言庫(kù)。
優(yōu)選的,在所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng)中,所述調(diào)試檢測(cè)模塊中腳本程序可實(shí)時(shí)進(jìn)行修改,并在修改完成且保存后由調(diào)試程序再次調(diào)用進(jìn)行調(diào)試。
優(yōu)選的,在所述基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)系統(tǒng)中,所述調(diào)試檢測(cè)模塊中當(dāng)根據(jù)腳本程序得到待調(diào)試的對(duì)象后,對(duì)待調(diào)試的對(duì)象所包括屬性值進(jìn)行顯示,并將待調(diào)試的對(duì)象打印到控制臺(tái)。
綜上所述,本發(fā)明所提供的基于OSGi構(gòu)建軟件運(yùn)行中進(jìn)行調(diào)試實(shí)現(xiàn)方法及系統(tǒng),方法包括:初始化安裝腳本語(yǔ)言庫(kù),并在OSGi服務(wù)端初始化安裝OSGi執(zhí)行腳本語(yǔ)言命令行插件;當(dāng)通過(guò)OSGi執(zhí)行腳本語(yǔ)言命令行插件捕獲到腳本程序時(shí),在控制臺(tái)中執(zhí)行調(diào)試程序?qū)δ_本程序進(jìn)行調(diào)試,當(dāng)完成調(diào)試時(shí)判斷是否卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件;當(dāng)需卸載所述OSGi執(zhí)行腳本語(yǔ)言命令行插件時(shí),則對(duì)所述OSGi執(zhí)行腳本語(yǔ)言命令行插件進(jìn)行卸載。本發(fā)明通過(guò)編寫腳本程序,依賴OSGi的熱拔插和基于服務(wù)查找特性,實(shí)現(xiàn)調(diào)試腳本獨(dú)立于被調(diào)試程序,而運(yùn)行時(shí)獲取被調(diào)試系統(tǒng)上下文的及時(shí)編譯及時(shí)使用。
應(yīng)當(dāng)理解的是,本發(fā)明的應(yīng)用不限于上述的舉例,對(duì)本領(lǐng)域普通技術(shù)人員來(lái)說(shuō),可以根據(jù)上述說(shuō)明加以改進(jìn)或變換,所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。