首先配置IDEA监听端口,如默认5005。启动远程服务时,通过命令行添加选项并重启,设置suspend=y以启动时即中断,address=ip:port修改为本地对外IP。开始调试 确保双方代码一致,否则远程调试无法启动。启动配置的远程服务器,查看日志确认连接成功。在本地IDE设置断点,通过浏览器或手机访问服务器,IDE即可在...
IDEA远程调试Java代码,帮你提升bug修复效率
前言
在遇到线上或测试环境的代码异常问题时,我们经常需要进行问题定位。传统的做法是查看异常日志,定位到出错代码,再结合相关参数和异常信息进行推断。然而,很多异常问题需要细致的debug才能精准定位解决,此时,能够如同在本地调试一样处理远程主机上的程序,可以显著提高bug修复效率。IDEA远程调试提供了解决方案,允许我们在线上环境执行本地的调试过程,排查远程程序的BUG或代码执行流程。
远程调试原理
本地与服务器端通过socket连接建立监听,当客户端访问服务器时,服务器会先查询本地IDE中是否有断点,如有则暂停在当前断点,否则返回客户端。
理论基础
JPDA(Java Platform Debugger Architecture)由三个规范组成:JVMTI(JVM Tool Interface)、JDWP(Java Debug Wire Protocol)与JDI(Java Debug Interface)。
1.JVMTI定义了虚拟机应提供的调试服务,包括调试信息、调试行为和通知,由虚拟机实现者提供实现,并集成在虚拟机中。
2.JDWP定义了调试服务和调试器之间的通信,包括调试信息格式和调试请求机制。
3.JDI在高层次上定义了调试者可以使用的调试接口,方便与远程调试服务交互,Java语言实现,调试器实现者可以直接使用该接口访问虚拟机调试服务。
远程调试分类
远程调试分为主动连接和被动连接两种模式。
主动连接模式:服务器配置监听端口,本地IDE连接远程端口进行调试,常用于解决一般调试问题。
被动连接模式:本地IDE监听端口,等待远程连接。适用于远程服务启动困难,启动时连接到本地进行调试分析。
主动连接调试步骤
1.1 对于SpringBoot,通过命令行添加选项并重启,确保新参数位于-jar之前。
1.2 对于Tomcat,修改启动脚本添加选项并重启。
IDEA中配置调试服务器
2.1 IDEA设置断点服务器。
防火墙端口放行
3. 如果远程服务器与IDEA网络不通,需开放端口以确保通信。
被动连接调试步骤
首先配置IDEA监听端口,如默认5005。启动远程服务时,通过命令行添加选项并重启,设置suspend=y以启动时即中断,address=ip:port修改为本地对外IP。
开始调试
确保双方代码一致,否则远程调试无法启动。启动配置的远程服务器,查看日志确认连接成功。在本地IDE设置断点,通过浏览器或手机访问服务器,IDE即可在断点处暂停并跟踪。
关闭调试
调试完成后,恢复防火墙设置。关闭远程服务器的Debug功能,以免影响性能。
进阶学习资源
在Java领域进阶,可以参考《JAVA核心知识点手册》。这本手册内容涵盖Java基础、集合、异常与反射、IO与NIO、多线程、JVM、Linux、MySql、Spring、Spring Cloud、Mybatis、Nginx、Redis、Dubbo、Kafka、SpringBoot等,提供全面的知识体系和实践指导。2024-09-29