反向 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的能力。
➡️