如何获取Java运行时动态生成的class文件

分析JDK动态代理时我们知道代理类是在运行时动态生成的,那么如何查看这些动态生成的代理类的内容?

使用 Hotspot JVM 时,我们可以使用其提供的 HSDB(Hotspot Debugger) 这个可视化工具来查看。

操作步骤:

  1. 打断点,在想要查看的代理类对象上打个断点(主要是方便获取代理类的类名),然后运行程序;

    打断点

  2. jps 找到自己应用的 PID;

    pid

  3. 在命令行中启动对应版本的 HSDBjava -classpath "%JAVA_HOME%\lib\sa-jdi.jar" sun.jvm.hotspot.HSDB ,此时会启动一个可视化的界面;

  4. File -> Attach to Hotspot process... Attach 上自己应用的 PID;

    attach自己的pid

    输入pid

  5. Tools -> Class Browser;

    class_browser

  6. 将调试时获取的代理类名称作为关键字搜索;

  7. 在搜索到的类结果面板中点 Create .class File ,此时会在启动 HSDB 命令的路径下生产对应的 .class 文件;

    输入要搜索的代理类并保存

  8. 利用 jd-gui.exe 或者 idea 来反编译 .class 文件。

参考资料

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

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

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信