2017-03-03 87 views
0

使用jmap命令,我可以查看變量及其狀態。同樣,是否有一個開源工具可以保存在JVM中運行的字節碼?儘管我們有源代碼,但有些時候它會發生變化 - 例如在AOP的幫助下。也可能有不同的版本在運行時的代碼,例如像有2個版本,一個罐子的類路徑...Java運行進程:在任意進程運行時查看字節代碼

的目標是能夠連接到進程我的系統上,並保存的狀態JVM將字節代碼包含到文件中,以供進一步檢查,而無需更改啓動器中的任何內容。所以我們在流程運行時連接,取出快照和分離(所以我們不要打擾現有的生產系統)。

可以使用Open JDK或Oracle JDK來運行應用程序。

+0

看一看這個答案https://stackoverflow.com/questions/35146746/write-java-object-into-class-file例外。 – SubOptimal

+0

@suboptimal謝謝。我會調查。儘管我們不使用CGLIB。將看到sun.jvm.hotspot.HSDB雖然正確的說法不能加載,即使當我在本地運行與sudo。 – tgkprog

回答

1

下面的命令與Oracle JDK作品(無法與OpenJDK的測試)

java -cp ${JDK_HOME}/lib/sa-jdi.jar \ 
    -Dsun.jvm.hotspot.tools.jcore.filter=sun.jvm.hotspot.tools.jcore.PackageNameFilter \ 
    -Dsun.jvm.hotspot.tools.jcore.PackageNameFilter.pkgList=sub.optimal \ 
    sun.jvm.hotspot.tools.jcore.ClassDump \ 
    12345 

這從JVM轉儲具有PID 12345從包sub.optimal所有類。這些課程被轉儲到當前目錄sub/optimal/...

note上述命令的運行過程和java可執行文件必須具有相同的JVM版本。否則會失敗,並

VMVersionMismatchException: Supported versions are 25.112-b15. Target VM is 25.112-b6