反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理

💡 原文中文,约6400字,阅读约需16分钟。
📝

内容提要

本文介绍了Java调试体系JPDA的结构与功能,包括JVM TI、JDWP和JDI接口,阐述了IDE如何利用这些接口实现本地与远程调试,并探讨了Arthas工具如何进行动态调试和内存对象获取。

🎯

关键要点

  • 调试时可能会跳过想调试的方法,IDE提供了Reset Frame功能,可以返回到之前的Stack Frame。
  • Java内置的调试体系JPDA由JVM TI、JDWP和JDI接口组成。
  • JVM TI提供控制JVM行为的功能,JDI接口通过JDWP协议与目标VM的JVMTI接口交互。
  • IDE通过JDI接口使用JDWP协议与目标VM进行远程调试。
  • 本地调试和远程调试的实现原理相似,都是通过JDWP协议进行交互。
  • agentlib和-javaagent都是加载自定义代码的方式,前者用于native lib,后者用于Java代码。
  • Arthas工具通过javaagent实现动态加载,支持获取内存中的对象实例。
  • Arthas结合了Instrumentation和JVMTI的能力,能够实现更丰富的调试功能。
🏷️

标签

➡️

继续阅读