本申請涉及大數(shù)據(jù),尤其涉及一種代碼處理方法、裝置、設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、動態(tài)字節(jié)碼增強(qiáng)和運(yùn)行時類型生成技術(shù),已經(jīng)是java領(lǐng)域常見的技術(shù)。這些增強(qiáng)技術(shù)大大的擴(kuò)展了基礎(chǔ)框架在運(yùn)行時的動態(tài)能力。然而,這些能力也給開發(fā)人員的調(diào)試跟蹤帶來了諸多不便之處。
2、在當(dāng)下,研發(fā)人員可以利用各種開發(fā)工具對靜態(tài)部署的java編譯程序進(jìn)行調(diào)試和跟蹤,但目前尚未有一種方案有效地幫助開發(fā)人員理解增強(qiáng)后的字節(jié)碼的運(yùn)行邏輯,該段代碼隱藏的邏輯和不透明性往往成為開發(fā)人員跟蹤和理解技術(shù)流程的痛點(diǎn)。
3、因此,如何輔助開發(fā)人員準(zhǔn)確便捷的理解增強(qiáng)的字節(jié)碼成為亟待解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、本申請?zhí)峁┮环N代碼處理方法、裝置、設(shè)備及存儲介質(zhì),用以輔助開發(fā)人員準(zhǔn)確便捷的理解增強(qiáng)的字節(jié)碼。
2、第一方面,本申請?zhí)峁┮环N代碼處理方法,包括:
3、在應(yīng)用程序的運(yùn)行過程中,根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象;
4、根據(jù)所述上下文對象,獲取目標(biāo)類的字節(jié)碼信息,所述目標(biāo)類為增強(qiáng)后的動態(tài)生成類;
5、根據(jù)所述目標(biāo)類的字節(jié)碼信息,生成可展示的目標(biāo)文件。
6、在一種可能的設(shè)計中,所述根據(jù)所述上下文對象,獲取目標(biāo)類的字節(jié)碼信息,包括:
7、根據(jù)原始類,在所述上下文對象中確定出新增的類,并將所述新增的類作為所述目標(biāo)類;
8、根據(jù)所述目標(biāo)類,獲取檢測接口運(yùn)行時的實(shí)例,得到目標(biāo)類的字節(jié)碼信息。
9、在一種可能的設(shè)計中,所述根據(jù)所述目標(biāo)類,獲取檢測接口運(yùn)行時的實(shí)例,得到目標(biāo)類的字節(jié)碼信息,包括:
10、利用所述檢測接口運(yùn)行時的實(shí)例執(zhí)行類文件轉(zhuǎn)換器實(shí)例,并傳入所述目標(biāo)類,觸發(fā)重新轉(zhuǎn)換操作,得到所述目標(biāo)類的字節(jié)碼信息。
11、在一種可能的設(shè)計中,在所述根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象之前,所述方法還包括:
12、創(chuàng)建所述監(jiān)聽接口實(shí)現(xiàn)類;
13、將所述監(jiān)聽接口實(shí)現(xiàn)類加載至所述應(yīng)用程序的配置文件中。
14、在一種可能的設(shè)計中,所述在應(yīng)用程序的運(yùn)行過程中,根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象,包括:
15、將所述配置文件中的監(jiān)聽接口實(shí)現(xiàn)類作為攔截點(diǎn);
16、在應(yīng)用程序的運(yùn)行過程中,根據(jù)所述攔截點(diǎn),在啟動完成事件的方法內(nèi)獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象。
17、在一種可能的設(shè)計中,所述根據(jù)所述目標(biāo)類的字節(jié)碼信息,生成可展示的目標(biāo)文件,包括:
18、對所述目標(biāo)類的字節(jié)碼信息進(jìn)行反編譯操作,得到所述目標(biāo)類的字節(jié)碼信息對應(yīng)的源代碼文件;
19、利用預(yù)設(shè)的展示形式,將所述源代碼文件生成所述目標(biāo)文件并展示。
20、第二方面,本申請?zhí)峁┮环N代碼處理裝置,包括:
21、第一獲取模塊,用于在應(yīng)用程序的運(yùn)行過程中,根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象;
22、第二獲取模塊,用于根據(jù)所述上下文對象,獲取目標(biāo)類的字節(jié)碼信息,所述目標(biāo)類為增強(qiáng)后的動態(tài)生成類;
23、生成模塊,用于根據(jù)所述目標(biāo)類的字節(jié)碼信息,生成可展示的目標(biāo)文件。
24、在一種可能的設(shè)計中,所述第二獲取模塊,具體用于:
25、根據(jù)原始類,在所述上下文對象中確定出新增的類,并將所述新增的類作為所述目標(biāo)類;
26、根據(jù)所述目標(biāo)類,獲取檢測接口運(yùn)行時的實(shí)例,得到目標(biāo)類的字節(jié)碼信息。
27、在一種可能的設(shè)計中,所述第二獲取模塊,根據(jù)所述目標(biāo)類,獲取檢測接口運(yùn)行時的實(shí)例,得到目標(biāo)類的字節(jié)碼信息,具體為:
28、利用所述檢測接口運(yùn)行時的實(shí)例執(zhí)行類文件轉(zhuǎn)換器實(shí)例,并傳入所述目標(biāo)類,觸發(fā)重新轉(zhuǎn)換操作,得到所述目標(biāo)類的字節(jié)碼信息。
29、在一種可能的設(shè)計中,在所述根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象之前,所述第一獲取模塊,還用于:
30、創(chuàng)建所述監(jiān)聽接口實(shí)現(xiàn)類;
31、將所述監(jiān)聽接口實(shí)現(xiàn)類加載至所述應(yīng)用程序的配置文件中。
32、在一種可能的設(shè)計中,所述第一獲取模塊,在應(yīng)用程序的運(yùn)行過程中,根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象,具體用于:
33、將所述配置文件中的監(jiān)聽接口實(shí)現(xiàn)類作為攔截點(diǎn);
34、在應(yīng)用程序的運(yùn)行過程中,根據(jù)所述攔截點(diǎn),在啟動完成事件的方法內(nèi)獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象。
35、在一種可能的設(shè)計中,所述生成模塊,具體用于:
36、對所述目標(biāo)類的字節(jié)碼信息進(jìn)行反編譯操作,得到所述目標(biāo)類的字節(jié)碼信息對應(yīng)的源代碼文件;
37、利用預(yù)設(shè)的展示形式,將所述源代碼文件生成所述目標(biāo)文件并展示。
38、第三方面,本申請實(shí)施例提供一種電子設(shè)備,包括:至少一個處理器和存儲器;
39、所述存儲器存儲計算機(jī)執(zhí)行指令;所述至少一個處理器執(zhí)行所述存儲器存儲的計算機(jī)執(zhí)行指令,使得所述至少一個處理器執(zhí)行如上第一方面以及第一方面各種可能的設(shè)計所述的代碼處理方法。
40、第四方面,本申請實(shí)施例提供一種計算機(jī)可讀存儲介質(zhì);
41、所述計算機(jī)可讀存儲介質(zhì)中存儲有計算機(jī)執(zhí)行指令,當(dāng)處理器執(zhí)行所述計算機(jī)執(zhí)行指令時,實(shí)現(xiàn)如上第一方面以及第一方面各種可能的設(shè)計所述的代碼處理方法。
42、第五方面,本申請實(shí)施例提供一種計算機(jī)程序產(chǎn)品,包括計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時,實(shí)現(xiàn)如上第一方面以及第一方面各種可能的設(shè)計所述的代碼處理方法。
43、本申請?zhí)峁┑拇a處理方法、裝置、設(shè)備及存儲介質(zhì),涉及大數(shù)據(jù)技術(shù)領(lǐng)域。在該方案中,通過在應(yīng)用程序的運(yùn)行過程中,根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取應(yīng)用程序中所有類的實(shí)例的上下文對象;根據(jù)上下文對象,獲取目標(biāo)類的字節(jié)碼信息,目標(biāo)類為增強(qiáng)后的動態(tài)生成類;根據(jù)目標(biāo)類的字節(jié)碼信息,生成可展示的目標(biāo)文件。該技術(shù)方案中,可以利用java的代理特性,獲取java應(yīng)用程序運(yùn)行時增強(qiáng)后的動態(tài)生成類的字節(jié)碼內(nèi)容,并對其進(jìn)行保存,之后得到可展示的java源碼程序,以供開發(fā)人員閱讀,輔助理解運(yùn)行時增強(qiáng)的邏輯和機(jī)制。
1.一種代碼處理方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述上下文對象,獲取目標(biāo)類的字節(jié)碼信息,包括:
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述目標(biāo)類,獲取檢測接口運(yùn)行時的實(shí)例,得到目標(biāo)類的字節(jié)碼信息,包括:
4.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,在所述根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象之前,所述方法還包括:
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述在應(yīng)用程序的運(yùn)行過程中,根據(jù)預(yù)先配置的監(jiān)聽接口實(shí)現(xiàn)類,獲取所述應(yīng)用程序中所有類的實(shí)例的上下文對象,包括:
6.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述根據(jù)所述目標(biāo)類的字節(jié)碼信息,生成可展示的目標(biāo)文件,包括:
7.一種代碼處理裝置,其特征在于,包括:
8.一種電子設(shè)備,其特征在于,包括:處理器,以及與所述處理器通信連接的存儲器;
9.一種計算機(jī)可讀存儲介質(zhì),其特征在于,所述計算機(jī)可讀存儲介質(zhì)中存儲有計算機(jī)執(zhí)行指令,所述計算機(jī)執(zhí)行指令被處理器執(zhí)行時用于實(shí)現(xiàn)如權(quán)利要求1-6中任一項(xiàng)所述的方法。
10.一種計算機(jī)程序產(chǎn)品,其特征在于,包括計算機(jī)程序,該計算機(jī)程序被處理器執(zhí)行時實(shí)現(xiàn)權(quán)利要求1-6中任一項(xiàng)所述的方法。