怎么查看運行中JavaClass源碼的三板斧

這篇文章主要講解了“怎么查看運行中Java Class源碼的三板斧”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么查看運行中Java Class源碼的三板斧”吧!

創(chuàng)新互聯(lián)主營平安網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,平安h5重慶小程序開發(fā)搭建,平安網(wǎng)站營銷推廣歡迎平安等地區(qū)企業(yè)咨詢

線上跑了個應(yīng)用,總感覺運行結(jié)果和你預(yù)期的有出入,而且代碼似乎和你本地的也不一致。這可咋辦,一咬牙,一跺腳停機重新上線嗎?

那是夠折騰的,我們來了解幾種不停機來查看 Java 應(yīng)用Class 源碼的方式。

像程咬金的功夫一樣,針對Class 源碼查看,我們也有三板斧。

一般我們要查看一個運行中程序的 Class 源碼,大致會經(jīng)過這樣三步:

一、定位,找到這個Class

二、將遠程 的 class 文件下載到本地

三、反編譯,查看源碼

這的過程,應(yīng)該都很清楚,我們重點來看第一第二步,怎樣找到這個class并下載到本地。

對于找Class 來說,如果是我們自己開發(fā)的代碼,而不是編譯時或者運行時增強以及生成的,那直接在遠程服務(wù)器搜索到并下載到本地就OK了。

像那些編譯時、以及運行時增強過的Class,甚至動態(tài)生成的Class,比如像OpenJPA、Spring/Cglib 的動態(tài)代理,  上面的辦法就無能為力了。

這種情況,可以直接用JDK 的神器 SA 工具(Java虛擬機的顯微鏡 Serviceability Agent),在 Class browser  里直接搜索,然后選擇 create .class file 文件就會默認保存到 SA Jar 所在的目錄。不過缺點是,SA連接時會把應(yīng)用掛起,直到斷開。

還有一種方法是各種增強的類庫,都默認提供了保存生成類的配置,如果此選項打開,就會把生成的、增強的class  寫到本地。比如像Cglib,在System.property里設(shè)置即可。

System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, ".");

Cglib 運行時判斷配置,打開就會把生成類的 class 二進制文件寫到本地。

如果類庫沒有或者你沒找到這個選項,又確實想要查看,那可以 Attach 一個 Java Agent  到JVM上。用Instrument或者ByteBuddy免 Jar 包掛上去,參考之前的文章(不用Jar 包的Agent?幾行代碼實現(xiàn)運行時增強)

有了Agent 的 transformer,大顯身手就看你的了。

感謝各位的閱讀,以上就是“怎么查看運行中Java Class源碼的三板斧”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么查看運行中Java Class源碼的三板斧這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

本文標題:怎么查看運行中JavaClass源碼的三板斧
鏈接地址:http://muchs.cn/article36/jejipg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司虛擬主機、、響應(yīng)式網(wǎng)站、網(wǎng)站制作、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)