讲师中心 微信公众号
AI工具推荐 视频效率加速

Java调试

Polar Sponsor
爱发电 赞助
.NET 9.0

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

Java Remote Debug

功能概述

Java Remote Debug是一项面向实际任务的技能,主要用于该技能用于在源码目录中调试远程 Java 进程;连接启用了 JDWP 的远程 JVM;

核心要点

  • 在业务类上设置断点、条件断点、方法断点;
  • 查看断点现场的局部变量、对象字段和调用栈;
  • 单步执行,或步出并查看返回值;

使用与执行

在缺少 -g:vars 时,结合源码恢复方法参数名;本机可用 node;远程 JVM 已开启 JDWP 调试端口;当前工作目录最好是对应项目的源码。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

结果检查与注意事项

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Java Remote Debug

该技能用于在源码目录中调试远程 Java 进程。

适用场景

  • 连接启用了 JDWP 的远程 JVM
  • 在业务类上设置断点、条件断点、方法断点
  • 查看断点现场的局部变量、对象字段和调用栈
  • 单步执行,或步出并查看返回值
  • 在缺少 -g:vars 时,结合源码恢复方法参数名

前提条件

  • 本机可用 node
  • 远程 JVM 已开启 JDWP 调试端口
  • 当前工作目录最好是对应项目的源码根目录

远程 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:本地调试服务端口。默认 4711
  • JAVA_DEBUG_SERVER_HOST:本地调试服务地址。默认 127.0.0.1

变量查看说明

vars 命令会优先显示真实局部变量。

如果目标类缺少 LocalVariableTable,会自动回退到 slot 推断模式。

如果当前工作区中能定位到对应源码,还会尝试恢复方法参数名,因此你看到的结果可能是:

  • 真实局部变量名
  • 源码恢复后的方法参数名
  • 回退后的 arg0、arg1

当前能力边界:

  • 对方法参数名恢复支持较好
  • 不保证恢复方法体内部所有局部变量名
  • 如果源码与远程运行版本不一致,恢复结果可能不准确

对象查看说明

vars 命令中的复杂对象显示为 ,可用 fields 命令查看其字段。

fields 命令会自动做一些友好化展示:

  • 自动展开第一层对象字段
  • 自动解析 String
  • 自动拆箱包装类型(Integer → 数字)
  • ArrayList 自动展开元素内容,空列表显示 [],有元素显示 [elem1, elem2] (size=N)
  • HashSet/LinkedHashSet/TreeSet 同样自动展开元素
  • HashMap/LinkedHashMap 自动展开为 {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
目录

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
IntelliJ IDEA调试技巧汇总
IntelliJ IDEA调试技巧汇总

本合集讲解 IDEA 断点调试、条件断点、远程调试、微服务链路调试、内存快照分析、异常定位高级用法,解决 Java 项目排查难题。

51

2026.08.11

Java Spring Boot多租户架构设计与数据隔离实战
Java Spring Boot多租户架构设计与数据隔离实战

本专题聚焦 Java 企业级系统中的多租户架构设计,讲解数据隔离策略、租户路由机制、数据库分库分表方案以及权限控制模型。通过真实 SaaS 系统案例,帮助开发者构建可扩展的多租户应用架构。

216

2026.06.29

Java Spring Boot3响应式编程与WebFlux实战
Java Spring Boot3响应式编程与WebFlux实战

本专题围绕Spring Boot 3中的响应式编程体系展开,系统讲解 WebFlux 的非阻塞模型、Reactive Streams、Mono 与 Flux 使用方式,以及在高并发场景下的性能优势。结合真实后端案例,帮助开发者构建低延迟、高吞吐的响应式服务架构。

180

2026.06.22

Java分布式事务与Seata实战架构设计
Java分布式事务与Seata实战架构设计

本专题围绕 Java 分布式系统中的事务一致性问题展开,系统讲解分布式事务的核心理论与解决方案。内容包括 Seata AT/TCC 模式原理、事务协调机制、服务调用链一致性保障以及高并发场景下的数据一致性设计策略。通过真实微服务案例,帮助开发者构建可靠的分布式事务处理体系。

161

2026.06.16

Java消息队列与异步解耦实战
Java消息队列与异步解耦实战

系统讲解 Java 中消息队列的集成与应用实践,涵盖消息队列的核心概念(生产者/消费者/Topic/Queue/Exchange)、RabbitMQ 的交换机类型与 Spring AMQP 集成、Kafka 分区/副本/消费者组机制与 Spring Kafka 配置、RocketMQ 事务消息与顺序消息、消息可靠投递(确认机制/持久化/重试)、消费端幂等性保障(唯一ID/去重表)、死信队列与延迟消息处理、消息积压监控与扩容策略,帮助开发

235

2026.05.18

Java缓存技术与Redis集成教程合集
Java缓存技术与Redis集成教程合集

系统讲解 Java 项目中缓存技术的选型与实践,涵盖本地缓存方案(HashMap 手动缓存/Guava Cache/Caffeine 高性能缓存)的使用与淘汰策略配置、Redis 数据结构(String/Hash/List/Set/ZSet)在缓存场景的应用、Jedis / Lettuce / Redisson 客户端选型、Spring Cache 注解(@Cacheable/@CachePut/@CacheEvict)的声明式缓存、缓

402

2026.05.15

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

280

2026.05.11

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

229

2026.05.09

Java 函数式接口与 Lambda 进阶技巧
Java 函数式接口与 Lambda 进阶技巧

在 Java Stream 基础之上进一步深入函数式编程,涵盖 @FunctionalInterface 注解与自定义函数式接口设计、四种方法引用(静态/实例/对象/构造器)的使用场景、Lambda 中的 effectively final 变量捕获规则、函数组合(andThen/compose)与柯里化技巧、Comparator 链式比较器构建、CompletableFuture 异步函数式编排、Reactor / RxJava 响应

248

2026.05.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn