Java远程调试保姆级教程(附详细图文)

 更新时间:2025年07月16日 11:26:12   作者:BLUE_JOKER  
这篇文章主要介绍了Java远程调试的相关资料,Java远程调试是一种在本地计算机上调试部署在远程服务器上的Java应用程序的能力,文中通过代码介绍的非常详细,需要的朋友可以参考下

背景

测试环境报错,但很难排查到问题,可以像本地debug的方式来调试远程代码

准备

1. xshell + 远程服务

2. idea + 本地代码

一、新增远程调试配置

1. idea -> run -> edit configration 

2.确定一个未被占用远程和本地占用的端口,开始编辑配置, 我这边用的jdk8

复制出来的参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8205

二、服务添加远程调试参数

登录服务器模块,添加在第二步骤中复制的监听参数,然后重启服务,  手动启动jar,  或者编辑启动脚本,

手动启动参数如下:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8205 -jar -Xmx512m -Xms512m web-4.2.jar

手动启动结果如下:

调整启动脚本示例如下:

手动启动会提示:Listening for transport dt_socket at address: 8205

三、通过xshell将转发端口8205透传到本地

远程监听转发接口为8205,本地监听配置端口为8205,所以透传就是远程:8205 -> localhost:8205

四、开始远程调试

1.点击idea 的远程配置Debug 按钮,启动远程调试web服务,成功启动页面如下:

2.对指定接口打上断点,  点击页面,触发接口,就会自动进入idea中断点位置

TIPS:

问题1:idea添加配置后启动debug按钮无法点击

排查远程服务是否启动失败, 排查监听端口是否透传成功

问题2:启动debug后等待一段时间弹出握手失败报错,然后停止监听

Error running '82-12001' Unable to open debugger port (localhost:8205): java.io.IOException "handshake failed - connection prematurally closed"

去排查xshell透出的端口,是否跟远程转发端口一致。如上述步骤中所示:

web远程启动端口为12001,转发到8205端口, 此时我们需要将监听的8205端口传到本地localhost,  这样idea配置才能正常握手8025

问题3:调试断点无法进入

远程代码最好跟本地一致,以防出现断点无法进入情况

知识点:

idea添加远程配置时生成的JVM参数是用于配置Java远程调试的核心参数,下面我详细解释每个部分的含义:

完整参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8205

分解解释:

  • -agentlib:jdwp

    • 表示加载JDWP(Java Debug Wire Protocol)代理库

    • 这是Java调试的标准协议实现

  • transport=dt_socket

    • 指定调试器与被调试JVM之间的通信传输方式

    • dt_socket表示使用socket网络通信(最常用)

    • 替代选项:dt_shmem(共享内存,仅限本地调试)

  • server=y

    • 定义JVM作为调试服务端(等待调试器连接)

    • 如果设为n,则JVM会主动连接调试器(较少使用)

  • suspend=n

    • 控制JVM启动时是否暂停等待调试器连接

    • y:暂停,直到调试器连接(适合调试启动过程)

    • n:立即启动,调试器可以随时连接(生产环境推荐)

  • address=8205

    • 指定调试端口号(这里是8205)

    • JDK 9+需要格式:address=*:8205(允许任意IP连接)

    • 默认只接受本地连接,如需远程需明确指定IP

总结 

到此这篇关于Java远程调试保姆级教程的文章就介绍到这了,更多相关Java远程调试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nacos配置中心的配置文件的匹配规则及说明

    Nacos配置中心的配置文件的匹配规则及说明

    这篇文章主要介绍了Nacos配置中心的配置文件的匹配规则及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java网络编程之TCP程序设计

    Java网络编程之TCP程序设计

    这篇文章主要为大家详细介绍了Java网络编程之TCP程序设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Netty分布式高性能工具类同线程下回收对象解析

    Netty分布式高性能工具类同线程下回收对象解析

    这篇文章主要为大家介绍了Netty分布式高性能工具类同线程下回收对象解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • mybatis中的limit参数解读

    mybatis中的limit参数解读

    这篇文章主要介绍了mybatis中的limit参数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • JAVA集成本地部署的DeepSeek的图文教程

    JAVA集成本地部署的DeepSeek的图文教程

    本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • java实现MD5加密算法的实例代码

    java实现MD5加密算法的实例代码

    这篇文章主要介绍了java实现MD5加密算法的实例代码,有需要的朋友可以参考一下
    2013-12-12
  • 多个版本JAVA切换的简单步骤记录

    多个版本JAVA切换的简单步骤记录

    在工作中或者学习过程中,有一些特殊情况我们需要来切换java版本来做比较,比如一些新特性等等的相关资料,这篇文章主要介绍了多个版本JAVA切换的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • Java生成Markdown格式内容完整代码示例

    Java生成Markdown格式内容完整代码示例

    这篇文章主要介绍了将Java对象数据生成为Markdown文本,并提供了一个MarkdownUtil工具类进行处理,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • springboot 返回json格式数据时间格式配置方式

    springboot 返回json格式数据时间格式配置方式

    这篇文章主要介绍了springboot 返回json格式数据时间格式配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java线程池队列DelayQueue的使用详解

    Java线程池队列DelayQueue的使用详解

    这篇文章主要介绍了Java线程池队列DelayQueue的使用详解,DelayQueue顾名思义,它是个无边界延迟队列,它的底层是基于PriorityBlockingQueue实现的,该队列中的元素都是按照过期时间顺序排序的,队列头部放的是即将过期的元素,需要的朋友可以参考下
    2023-12-12

最新评论