反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理 | 京东云技术团队

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

内容提要

本文介绍了Java的调试体系JPDA,包括JVM TI、JDWP和JDI三个组成部分,以及Arthas工具的使用方法和原理。

🎯

关键要点

  • 调试时可能会跳过想调试的方法,导致需要重新执行。
  • IDE提供了Reset Frame功能,可以返回到之前的Stack Frame。
  • GDB的Reverse Debugging功能更强大,能够实现真正的逆向调试。
  • Java的调试体系JPDA由JVM TI、JDWP和JDI三部分组成。
  • JVM TI是一个调试接口,提供控制JVM行为的功能。
  • JDI接口通过JDWP协议与目标VM的JVMTI接口交互。
  • JDWP协议可以理解为一种RPC接口,用于传输调试信息。
  • Arthas工具部分功能直接使用JVMTI接口,提供更丰富的调试能力。
  • 本地调试和远程调试在实现上没有区别,都是通过JDWP协议进行交互。
  • agentlib和javaagent都是加载自定义代码的方式,前者用于native lib,后者用于Java层面的增强。
  • Arthas支持静态和动态加载,动态加载通过VirtualMachine实现。
  • Arthas可以直接获取内存中的对象实例,结合了Instrumentation和JVMTI的能力。
🏷️

标签

➡️

继续阅读