2017-03-03 102 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