Java 远程调试
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_b086e203/debug-java。
技能介绍
要解决的问题
调试远程 Java 进程时,常缺少一个轻量、贴近源码目录的入口:既要连接 JDWP 端口,又要按类名、行号或方法下断点,并在命中后看清局部变量、对象字段和调用栈。若目标类缺少 -g:vars,方法参数名也可能变成 arg0,进一步增加定位成本。
技能如何工作
该技能围绕源码工作区运行,默认把当前目录作为根目录。它通过本地调试服务连接远程 JVM,支持:
- 断点管理:按类名和行号、源码路径和行号、方法名或重载方法设置断点;也可加简单条件。
- 现场查看:查看线程、当前调用栈、当前变量,并用
fields钻取复杂对象。 - 对象展示:自动展开第一层字段、解析
String、拆箱包装类型,并展开常见集合。 - 单步控制:支持步过、步进、步出,观察执行路径和返回值。
- 参数名恢复:在缺少
LocalVariableTable时,结合源码尝试恢复方法参数名。
适用边界
使用前需要远程 JVM 已开启 JDWP 调试端口,且当前工作目录最好对应项目源码根目录。断点设置前目标类需要已经加载;命中后线程会挂起,需要继续或单步。方法断点依赖行号信息,条件断点更适合简单比较。源码与远程版本不一致时,参数名或局部变量名恢复可能不准确,且不保证恢复方法体内所有局部变量名。
使用场景
- 生产服务出现偶发空指针,需要连接远程 JDWP 进程,在业务类断点处查看局部变量和对象字段。
- 线上方法参数名因缺少调试信息变成 arg0,需要在源码目录中恢复参数名并核对请求入参。
- 复现接口慢请求时,需要按类名、行号或方法名设置断点,再步进观察执行路径和返回值。
- 排查集合类对象内容时,需要用 fields 展开第一层字段、解析 String 并查看 HashMap 或 List。
适合人员
- 负责线上 Java 服务排障的后端工程师,需要在不重启应用的情况下断点查看现场状态。
- 接手缺少调试信息旧项目的维护者,需要恢复方法参数名以理解入参含义。
- 排查偶发接口异常的 SRE,需要在远程 JVM 上设置条件断点并步进复现问题。
- 分析复杂对象内容的业务开发,需要展开集合字段和对象引用以确认数据状态。