反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理
💡
原文中文,约6400字,阅读约需16分钟。
📝
内容提要
本文介绍了Java调试体系JPDA的组成及功能,强调了IDE在调试中的重要性。通过JVM TI、JDWP和JDI接口,开发者可实现本地和远程调试。Arthas工具结合Instrumentation和JVMTI,提供更强大的调试功能。
🎯
关键要点
- 调试过程中可能会跳过想调试的方法,IDE提供了重置栈帧的功能。
- Java内置的调试体系JPDA由JVM TI、JDWP和JDI组成。
- JVM TI提供控制JVM行为的功能,JDI是Java接口,通过JDWP与目标VM交互。
- IDE通过JDI接口使用JDWP协议与目标VM的JVMTI交互,支持本地和远程调试。
- 本地调试和远程调试在实现上没有区别,都是通过JDWP协议进行交互。
- agentlib和javaagent都是加载自定义代码的方式,前者用于native lib,后者用于Java代码。
- Arthas工具结合Instrumentation和JVMTI,提供强大的调试功能,支持动态加载和获取内存对象。
- Arthas的vmtool命令可以直接获取内存中的指定对象实例,融合了Instrumentation和JVMTI的能力。
❓
延伸问答
Java调试体系JPDA的组成部分有哪些?
JPDA由JVM TI、JDWP和JDI三部分组成。
IDE在Java调试中有什么重要功能?
IDE可以通过重置栈帧功能,让程序返回到之前的状态,支持本地和远程调试。
本地调试和远程调试有什么区别?
本地调试和远程调试在实现上没有区别,都是通过JDWP协议进行交互。
Arthas工具如何增强Java调试功能?
Arthas结合Instrumentation和JVMTI,支持动态加载和获取内存对象,提供强大的调试功能。
JVM TI的主要功能是什么?
JVM TI提供控制JVM行为的功能,包括分析、调试、监控和线程分析等。
agentlib和javaagent有什么区别?
agentlib用于加载native lib,需要C/C++编写,而javaagent用于Java代码,通常用于类的增强和转换。
➡️