通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac
Java Remote Debug是一项面向实际任务的技能,主要用于该技能用于在源码目录中调试远程 Java 进程;连接启用了 JDWP 的远程 JVM;
在缺少 -g:vars 时,结合源码恢复方法参数名;本机可用 node;远程 JVM 已开启 JDWP 调试端口;当前工作目录最好是对应项目的源码。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
该技能用于在源码目录中调试远程 Java 进程。
-g:vars 时,结合源码恢复方法参数名node远程 JVM 启动参数示例:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
在技能目录执行:
node cli.js
如果你是在项目源码目录中调用技能,建议显式指定工作区根目录:
JAVA_DEBUG_WORKSPACE_ROOT=$PWD node /path/to/java-remote-debug/cli.js
说明:
cli.js 会自动拉起本地调试服务连接远程 JVM:
node cli.js connect 127.0.0.1:5005
查看状态:
node cli.js status
断开连接:
node cli.js disconnect
查看线程:
node cli.js threads
查看当前调用栈:
node cli.js stack
查看当前变量:
node cli.js vars
继续执行:
node cli.js continue
等待断点命中:
node cli.js wait 60000
查看当前断点现场:
node cli.js inspect
查看所有断点:
node cli.js breakpoints
查看对象字段(对象 ID 可从 vars 输出中获取):
node cli.js fields 23379 node cli.js fields 23379 --maxDepth 2
列出已加载类:
node cli.js classes 'com.example.*'
按类名和行号下断点:
node cli.js bp com.example.order.OrderController:81
按源码路径和行号下断点:
node cli.js bp src/main/java/com/example/order/OrderController.java:81
按方法名下断点:
node cli.js bp com.example.order.OrderController#queryList
按重载方法下断点:
node cli.js bp 'com.example.order.OrderController#queryList(java.lang.String,int)'
行断点加条件:
node cli.js bp com.example.order.OrderController:81 --if 'pageNo == 1'
方法断点加条件:
node cli.js bp 'com.example.order.OrderController#queryList(java.lang.String,int)' --if 'keyword != null'
清除断点:
node cli.js clear 12 node cli.js clear com.example.order.OrderController:81
步过:
node cli.js step over
步进:
node cli.js step into
步出:
node cli.js step out
通常不需要手工管理,本地服务会由 cli.js 自动启动。
如果需要手工启动或停止:
node cli.js server start --port 4711 node cli.js server stop
JAVA_DEBUG_WORKSPACE_ROOT:源码工作区根目录。默认是当前目录JAVA_DEBUG_SERVER_PORT:本地调试服务端口。默认 4711JAVA_DEBUG_SERVER_HOST:本地调试服务地址。默认 127.0.0.1vars 命令会优先显示真实局部变量。
如果目标类缺少 LocalVariableTable,会自动回退到 slot 推断模式。
如果当前工作区中能定位到对应源码,还会尝试恢复方法参数名,因此你看到的结果可能是:
arg0、arg1当前能力边界:
vars 命令中的复杂对象显示为 ,可用 fields 命令查看其字段。
fields 命令会自动做一些友好化展示:
String[],有元素显示 [elem1, elem2] (size=N){key1=value1, key2=value2} (size=N)如果 List 中的元素是对象,会显示对象 ID,可继续用 fields 逐层钻取。
1. connect 连接远程 JVM 2. bp 设置断点 3. wait 等待断点命中 4. inspect / vars / stack 查看现场 5. fields查看对象字段和集合内容 6. fields 逐层钻取嵌套对象 7. step over / into / out 单步调试 8. continue 继续执行 9. disconnect 结束调试
==、!=、null 判断JAVA_DEBUG_SERVER_PORT 或 server start --port相关专题
热门下载
相关下载
精品课程
共0课时 | 0人学习
共0课时 | 0人学习
共0课时 | 0人学习