JDK 工具 HSDB 檢視動態生成類
阿新 • • 發佈:2021-09-29
前置工作
1. 複製 JDK 安裝目錄\jre\bin\sawindbg.dll 到 JDK 安裝目錄同級的 jre\bin 目錄下,否則會報錯找不到 sawindbg.dll 檔案。
比如我的 sawindbg.dll 檔案在 D:\Program Files\Java\jdk1.8.0_301\jre\bin 目錄下,需要複製到 D:\Program Files\Java\jre1.8.0_301\bin 目錄下
2. 啟動工程,需要注意的是,啟動工程的 JVM 環境必須是安裝的 JDK 環境,否則後續操作會報錯 JVM 版本不一致。
比如我在 idea 中直接用 main 方法啟動,此時操作就會報錯,因為 idea 會使用預設的 OpenJDK 去執行這段程式碼。解決方法是,手動配置 JDK,或者在已經配置好的工程中執行。比如我的就是在配置好的 SpringBoot 的啟動類中執行示例程式碼。
開始使用
1. 做完以上前置工作後,直接啟動工程,注意不要讓工程啟動後短時間內就終止,因為程式終止後生成的 class 檔案也會銷燬,這裡可以使用迴圈或者執行緒 sleep
2. win + r 開啟 DOS 視窗,
輸入命令 java -cp ".;%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
Enter 開啟 HSDB 圖形化介面
這個命令是啟動 JDK /lib/sa-jdi.jar,HSDB 類是一個很強大的JVM執行時狀態分析工具
3. 選擇第一個 Attach to HotSpot process
4. 輸入工程的程序 PID,可以開啟資源管理器或 VisualVM 檢視。VisualVM 在 JDK\bin 目錄下,啟動 jvisualvm 就可以啦
5. 選擇第一個 Class Browser
6. 搜尋委託類(被代理的類),比如我的是 Meal
7. 選擇指定的 class 生成 .class 檔案,比如CGLib 動態生成的子類是包含 $FastClassByCGLIB$ 的類
8. 生成 .class 檔案,儲存路徑在 JDK\lib\包路徑 目錄下。
比如我的生成路徑是
9. 用 idea 等反編譯工具開啟,idea 沒裝反編譯外掛的就自己下載吧