Java运行进程:在任意进程的运行时查看字节码

Java运行进程:在任意进程的运行时查看字节码,java,runtime,jvm-hotspot,jmap,Java,Runtime,Jvm Hotspot,Jmap,使用jmap命令,我可以查看变量及其状态。类似地,是否有开源工具来保存JVM中运行的字节码?虽然我们有源代码,但有时它会发生变化——例如在AOP的帮助下。此外,在运行时可能会有不同版本的代码,例如一个类路径有两个版本的jar 目标是能够附加到我的系统上的进程,并将JVM的状态(包括字节码)保存到文件中,以供进一步检查,而无需更改启动器中的任何内容。所以我们在进程运行时连接,取出快照和分离(这样我们就不会对现有的生产系统造成太大的干扰) 可以使用Open JDK或Oracle JDK运行应用程序。

使用jmap命令,我可以查看变量及其状态。类似地,是否有开源工具来保存JVM中运行的字节码?虽然我们有源代码,但有时它会发生变化——例如在AOP的帮助下。此外,在运行时可能会有不同版本的代码,例如一个类路径有两个版本的jar

目标是能够附加到我的系统上的进程,并将JVM的状态(包括字节码)保存到文件中,以供进一步检查,而无需更改启动器中的任何内容。所以我们在进程运行时连接,取出快照和分离(这样我们就不会对现有的生产系统造成太大的干扰)


可以使用Open JDK或Oracle JDK运行应用程序。

以下命令适用于Oracle JDK(无法使用OpenJDK测试它)

这将从JVM中转储pid
12345
sub.optimal
中的所有类。这些类被转储到当前目录
sub/optimal/…

注意运行的进程和上述命令中的
java
可执行文件必须是相同的JVM版本。否则它将失败,出现如下异常

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

看看这个答案。@非常感谢。我会调查的。虽然我们没有使用CGLIB。将看到sun.jvm.hotspot.HSDB,尽管它不是说不能加载,即使我在本地使用sudo运行它。
VMVersionMismatchException: Supported versions are 25.112-b15. Target VM is 25.112-b6