偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

查看運行中Java Class 源碼的三板斧

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

 [[352792]]

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

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

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

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

一、定位,找到這個Class

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

三、反編譯,查看源碼

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

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

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

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

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

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

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

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

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

本文轉載自微信公眾號「Tomcat那些事兒  」,可以通過以下二維碼關注。轉載本文請聯(lián)系Tomcat那些事兒公眾號。

 

責任編輯:武曉燕 來源: Tomcat那些事兒
相關推薦

2013-07-03 11:13:58

DevOps

2014-07-29 11:25:18

LinuxMySQL

2017-03-23 10:54:58

LINUXMYSQL優(yōu)化

2011-03-09 15:23:25

Windows Ser

2009-02-19 10:20:00

2020-09-03 15:32:08

Wireshark數(shù)據(jù)包分析

2017-08-21 23:50:45

線上內存OOM

2019-05-30 14:30:42

技術管理架構

2012-11-08 16:05:23

2022-07-22 09:55:29

軟件工程師

2020-03-09 13:37:49

Serverless無服務器騰訊云

2021-02-15 22:07:18

項目策略模式

2018-06-19 08:50:15

崗位總監(jiān)管理

2010-12-29 10:29:31

Linux磁盤管理dfdu

2019-08-13 16:23:19

JavaScript數(shù)組方法

2022-05-07 11:47:36

服務器架構

2022-03-29 18:20:10

戴爾

2019-11-14 08:34:08

LinuxMySQLCPU

2010-05-28 09:17:45

ARM服務器

2021-06-25 15:19:13

攻防演練
點贊
收藏

51CTO技術棧公眾號