使用HSDB查看javassist生成的动态class

1,595 阅读1分钟
原文链接: since1986.github.io

前言

今天需要分析一个工程中的几个动态代理类,但是,这几个动态代理类是由javassist生成的,在target中是不存在其文件的,因此无法直接查看。然后搜索了一番,找到了使用HSDB(HotSpot Debugger)这个工具来查看的办法。

正文

直接上操做步骤吧,这个HSDB本就是一个实用工具,实践一下就会用了。

  • 第一步. 运行起自己的应用。

  • 第二步. jps -l 找到自己应用的PID

  • 第三步. sudo java -classpath "$JAVA_HOME/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB启动HSDB

  • 第四步. File -> Attach to HotSpot Process... Attach上自己应用的PID

  • 第五步. Tools -> Class Browser
  • 第六步. 按照要查找的动态代理类的类名作为关键字搜索(模糊搜索)

  • 第七步. 在搜到的类结果面板中点Create .class File,此时会在刚才我们执行打开HSDB命令的目录中生成对应的.class文件

  • 第八步. 用idea查看生成对应的.class文件即可

参考资料

javassist Tutorial 1

从java进程里dump出类的class文件的小工具–dumpclass

从JVM中dump出动态代理生成的class

通过HSDB来了解String值的真身在哪里

借HSDB来探索HotSpot VM的运行时数据

如何dump出一个Java进程里的类对应的Class文件?

Dump classes from running JVM process.

保存java 动态代理生成的字节码文件