尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
IntelliJ IDEA 远程调试实战指南:基于 JDWP 协议调试远程 Tomcat 与 Jetty 服务
文档教程【免费下载链接】IntelliJ-IDEA-TutorialIntelliJ IDEA 简体中文专题教程项目地址https://gitcode.com/gh_mirrors/in/IntelliJ-IDEA-Tutorial点击查看免费下载本指南完整讲解如何在 IntelliJ IDEA 中通过 JDWPJava Debug Wire Protocol协议对部署在远程服务器上的 Tomcat、Jetty 应用进行远程断点调试。文章以本仓库 remote-debugging.md 的实操流程为主线覆盖本地 Remote 运行配置、服务器端 JVM 参数注入、连接验证与断点命中的全过程。读完本文你将掌握一套不依赖 IDEA 与服务器同机、可直接落地的远程调试方案并理解-agentlib:jdwp参数中每个字段的实际作用。远程调试原理速览JPDA 与 JDWP远程调试的本质是让远程 JVM 对外暴露一个调试端口再由本地的 IntelliJ IDEA 以调试客户端身份连上这个端口双方通过JDWPJava Debug Wire Protocol交换断点、变量、线程栈等调试信息。JDWP 是 Java 平台调试架构JPDAJava Platform Debugger Architecture三件套之一JPDA 组成角色说明JVM TITool InterfaceJVM 内部虚拟机提供给调试工具的底层接口JDWPDebug Wire Protocol通信层调试端与被调试端之间的线上传输协议JDIDebug Interface客户端IntelliJ IDEA 调试器所依赖的高级 Java 接口JDWP 的启用方式非常简单在远程 JVM 启动命令上附加-agentlib:jdwp参数即可。本文反复使用的核心参数如下-agentlib:jdwptransportdt_socket,servery,suspendn,address5005参数项取值作用transportdt_socket以 SocketTCP方式传输调试数据为默认传输方式Windows 下 IDEA 也支持dt_shmem共享内存但跨机远程调试必须使用dt_socketservery被调试的 JVM 作为服务端主动监听调试端口等待客户端IDEA接入若为n则表示作为客户端去连接调试器suspendnJVM 启动后是否立即挂起等待调试器连接n表示不挂起、正常启动y表示挂起等待连接成功后才继续执行address5005监听/连接的目标调试端口需保证该端口在远程服务器上未被占用从本教程的定位看这套流程适用于 README.md 中说明的 IntelliJ IDEA 14~2023 及同源的 WebStorm、PyCharm 等 JetBrains 系列 IDE——凡是基于 JVM 的远程调试其配置入口与参数格式完全一致。准备工作确认 IP 与放行防火墙远程调试的第一步是确保本地 IDEA 能与远程服务器建立 TCP 连接明确远程服务器 IP例如本文沿用文档示例192.168.92.128请替换为你自己服务器的实际地址。处理防火墙远程调试端口5005必须对本地可达。原文档给出的做法是直接关闭防火墙service iptables stop这是 CentOS 6 等旧系统惯用命令。若使用 CentOS 7 或 Ubuntu 等发行版更推荐按需放行 5005 端口而非整体关闭防火墙例如# CentOS 7firewalld firewall-cmd --permanent --add-port5005/tcp firewall-cmd --reload # Ubuntuufw ufw allow 5005/tcp建议只对可信网络或内网环境开放调试端口避免将调试端口暴露在公网上。本地 IDEA创建 Remote 运行配置远程调试的客户端侧配置在本地 IDEA 中完成路径为打开Run / Debug Configurations窗口工具栏运行配置下拉框 → Edit Configurations或Alt Shift F10→ 选择 Remote 类型。在配置类型列表中选中Remote点击新建一条远程运行配置如图所示创建后IDEA 会自动生成一段 JVM 参数出现在配置面板的Command line arguments for remote JVM区域即上文反复提到的-agentlib:jdwptransportdt_socket,servery,suspendn,address5005请先复制这段参数稍后要原样注入到远程服务器的启动脚本中。在配置面板中填写服务器信息Host填入远程服务器 IP如192.168.92.128Port保持与address5005一致Transport选择SocketDebugger mode保持默认的Attach本地 IDEA 作为客户端去附着远程 JVM这也是与servery匹配的连接模式。从图示可以看到IDEA 给出的参数默认suspendn意味着远程 JVM 启动后不会阻塞等待调试器应用可以立即对外提供服务——这对生产/预发环境的远程调试非常重要。远程 Tomcat 开启调试在 catalina.sh / catalina.bat 中注入参数以 Linux 环境为例假设 Tomcat 安装于/usr/program/tomcat7其启动脚本为/usr/program/tomcat7/bin/catalina.sh编辑启动脚本vim /usr/program/tomcat7/bin/catalina.sh在文件最上方添加注意单引号保留避免 Shell 拆分变量export JAVA_OPTS-agentlib:jdwptransportdt_socket,servery,suspendn,address5005如果你的项目本身还有自定义 JVM 参数如内存设置-Xmx、编码-Dfile.encoding等请把调试参数与你原有的参数合并成同一个 JAVA_OPTS 字符串不要重复赋值覆盖例如export JAVA_OPTS-Xms512m -Xmx1024m -agentlib:jdwptransportdt_socket,servery,suspendn,address5005Windows 环境则编辑catalina.bat在文件顶部添加Windows 下不加引号set JAVA_OPTS-agentlib:jdwptransportdt_socket,servery,suspendn,address5005更推荐的注入方式setenv.sh直接修改catalina.sh的缺点是升级 Tomcat 或重装后容易丢失配置。Tomcat 官方支持在bin目录下创建独立的setenv.shWindows 为setenv.bat其内容会在启动时被catalina.sh自动加载是隔离调试配置的常见做法# 新建 /usr/program/tomcat7/bin/setenv.sh export JAVA_OPTS-agentlib:jdwptransportdt_socket,servery,suspendn,address5005两种方式最终都会把参数交给 JVM 进程原理相同可任选其一。远程 Jetty 开启调试Jetty 与 Tomcat 的差异在于Jetty 无需安装只要有对应的 jar 包即可直接启动应用因此调试参数可以直接内联在启动命令中。在启动应用的命令里追加之前复制的 JDWP 参数即可java -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar {your jetty path} {your port} --path {your war} 1/dev/null 21 对这段命令的说明片段作用java -agentlib:jdwp...以开启调试端口的 JVM 启动 Jetty-jar {your jetty path}Jetty 主 jar 路径{your port}Jetty 对外服务端口--path {your war}部署的 Web 应用路径1/dev/null 21 标准输出/错误重定向到空设备并在后台运行避免日志刷屏终端注意这里的address5005是调试端口与 Jetty 的业务端口{your port}相互独立不要混淆。连接与断点调试完成以上配置后按如下顺序操作先启动远程服务器Tomcat 或 Jetty确认 JVM 已带 JDWP 参数启动并成功监听 5005 端口。可用netstat -anp | grep 5005或ss -lntp | grep 5005验证。再在本地启动 Remote 运行配置选中刚创建的 Remote 配置点击 Debug 按钮绿色甲虫图标或Shift F9。如果连接成功IDEA 的 Debug 工具窗口会输出类似信息Connected to the target VM, address: 192.168.92.128:5005, transport: socket出现Connected to the target VM即代表本地 IDEA 已与远程 JVM 建立 JDWP 通道接下来就可以像本地调试一样操作在本地源码中需要的位置打上断点Ctrl F8用浏览器或接口工具访问远程服务的对应 URL请求进入断点行时执行会在本地 IDEA 中停住可以看到线程栈、变量值等调试信息且能正常进行单步、步入、求值等操作。关于断点命中后的常用操作F7步进、F8步过、F9恢复运行、Alt F8表达式求值、Drop Frame回退栈帧等本仓库的 debug-introduce.md 中有完整的 Win/Mac 快捷键对照表与进阶调试技巧条件断点、Pass count、断点自动删除、内存查看等远程调试与本地调试在断点操作上完全一致可直接参考该文。常见问题与注意事项suspendy与suspendn的选择调试应用启动阶段如 Spring 容器初始化的代码时可临时改为suspendy这样 JVM 会等待 IDEA 连接后才继续启动保证不遗漏早期代码平时保持n避免服务阻塞。端口冲突与防火墙address5005必须未被占用且防火墙/安全组需放行该端口多实例部署时可把各实例的调试端口错开如 5005、5006。连接失败的常见原因远程 JVM 未真正加载 JDWP 参数检查启动日志、Host/Port 填写不一致、transport不是dt_socket、服务器防火墙拦截等。安全提醒远程调试端口暴露在公网有被利用的风险建议仅在内网/测试环境使用或调试完成后移除启动参数并重启应用。与热部署插件搭配若希望远程修改代码后自动生效可结合本仓库 jrebel-setup.md 介绍的 JRebel 插件使用进一步缩短远程调试的迭代周期。关联阅读remote-debugging.md本文依据的原始实操文档debug-introduce.mdDebug 设置、快捷键与进阶断点技巧jrebel-setup.mdJava 热部署插件 JRebel 的安装与使用README.md本套 IntelliJ IDEA 简体中文专题教程的完整目录与适用范围赞分享文档教程【免费下载链接】IntelliJ-IDEA-TutorialIntelliJ IDEA 简体中文专题教程项目地址https://gitcode.com/gh_mirrors/in/IntelliJ-IDEA-Tutorial点击查看免费下载相关推荐在 IntelliJ 中远程调试 GitBucket基于 JDWP 的断点调试完整指南在 IntelliJ 中远程调试 GitBucket基于 JDWP 的断点调试完整指南 导读 GitBucket 是一个由 Scala 构建、具备 GitHu后端代码托管开发工具DevOpsIntelliJ IDEA 远程调试 Tomcat 应用终极完整指南IntelliJ IDEA 远程调试 Tomcat 应用终极完整指南 IntelliJ IDEA 是一款功能强大的 Java 集成开发环境提供了便捷的远程调文档教程IntelliJ IDEA 远程调试视频流媒体服务开发终极指南 IntelliJ IDEA 远程调试视频流媒体服务开发终极指南 IntelliJ IDEA 作为业界顶级的 Java IDE其强大的远程调试功能在视频文档教程上一篇Android Spannable富文本终极指南10个常见问题快速解决方案下一篇全面解析mobilenetv3_large_100.ra_in1k轻量级图像分类模型的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

openrig 配置管理实战:统一管理 Claude Code 与 Codex 的 YAML 声明式方案

openrig 配置管理实战:统一管理 Claude Code 与 Codex 的 YAML 声明式方案

1. openrig 到底在解决什么问题第一次看到 openrig 这个名字,很多人会以为是某个硬件机架项目,或者跟服务器上架有关。实际上它跟物理设备没有半点关系,它盯上的是一个更隐蔽、也更让人头疼的场景:当你同时使用多个 AI 编程助手时…

📅 2026/10/1 7:37:47
嵌入式软硬协同:从物理约束到系统交付的工程本质

嵌入式软硬协同:从物理约束到系统交付的工程本质

1. 这不是选择题,而是一道需要拆解的工程题“大学生想进入嵌入式行业,到底应该选嵌软还是嵌硬?”——这句话在知乎、CSDN、牛客网和B站评论区每年重复上万次,但几乎没人告诉你:它本身就是一个伪命题。我带过37个校招实…

📅 2026/10/1 7:32:47
vibevoice/vibeasr 接入 TaoToken:统一 Key 调用语音识别与合成 API 的配置大纲

vibevoice/vibeasr 接入 TaoToken:统一 Key 调用语音识别与合成 API 的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/1 7:32:47
MORE NEWS

更多资讯

📰

2026游戏客服成本高、响应慢、出海合规难?这套一体化方案被多家头部公司验证过了

引言做游戏运营的人,对下面这些场景一定不陌生:玩家半夜充值不到账,客服没人响应,第二天差评已经刷屏;出海游戏玩家用LINE咨询,客服团队却只会用微信后台;每月客服人力成本几十万,但…

📰

Kali Linux渗透测试环境搭建:新手必学工具与基础配置详解

一、引言:装好 Kali ≠ 能干活 几乎所有网安新手的第一个动作都是"装个 Kali"。但真实情况往往是:虚拟机装完了,apt upgrade 一跑,桌面崩了;工具装了一堆,扫描时却连靶机都 ping 不通&#xff1b…

📰

linux-command 项目实战:grub2-set-default 命令详解——设置 GRUB 默认启动内核的完整指南

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 导读 grub2-set-default 是…

📰

en.javascript.info 逻辑运算符实战:深入解析 `alert( alert(1) alert(2) )` 的输出与短路求值

文档/教程前端 【免费下载链接】en.javascript.info Modern JavaScript Tutorial 项目地址: https://gitcode.com/gh_mirrors/en/en.javascript.info 点击查看 免费下载 导读 本篇文章基于 en.javascript.info(Modern JavaScript Tutorial&#xff09…

📰

Grok 4.7 API升级详解:稳定性优化与开发者适配指南

1. Grok 4.7 不是“新模型”,而是API层的一次精准外科手术 Grok 4.7 这个名字一出来,很多开发者第一反应是:“又出新大模型了?”——其实不是。它既不是参数量翻倍的下一代,也不是架构重构的全新版本,而是…

📰

Agent 开发实战:用 Laya 和 Jev 构建判断器,让智能体从能跑到靠谱

1. 从“能跑”到“靠谱”:为什么你的 Agent 需要一个判断器做 Agent 开发的朋友大概率都经历过这个阶段:Demo 跑通了,工具调用也接上了,看着模型一步步执行任务,感觉一切都很美好。但一旦把它放到真实场景里&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬