其他分享
首页 > 其他分享> > Idea线上联调的原理及步骤

Idea线上联调的原理及步骤

作者:互联网

1、为什么要远程联调

当我们的代码在线上/测试环境运行出现异常需要进行问题定位时,之前的传统做法是:查看异常日志,根据日志定位到出错代码,然后再根据相关参数及异常信息进行推断。但是很多异常问题需要更细致的进行debug才能够更精准的去定位和解决,这种情况下,我们希望能够像在本地调试一样去debug线上/测试环境的代码,这样可以大大提升bug修复的效率。IDEA远程调试为我们提供了解决方案,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。

2、远程联调的原理

本地远程调试服务器端的代码原理:本地和服务器端建立一个socket连接监听,当客户端访问服务器的时候,服务器端会先去问本地idea有没有断点,如果有会停在当前断点,如果没有就返回给客户端。

2.1、理论基础

JPDA(Java Platform Debugger Architecture是Java平台调试体系结构的缩写。由3个规范组成,分别是JVMTI(JVM Tool Interface)JDWP(Java Debug Wire Protocol)JDI(Java Debug Interface)

2.2、远程调试的分类

3、主动连接调试

3.1、远程服务中开启debug服务

3.1.1、SpringBoot项目

# 命令行添加选项,并重启,注意新参数必须在 -jar 之前
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar springbootfirst.jar

3.1.2、tomcat

# 启动脚本中添加选项,并重启
##  方法1、sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
## 方法2、使用sed命令
sed -i '$a\JAVA_OPTS=\"$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000\"' /opt/huawei/fce/apps/platform/bin/setenv.sh

3.2、IDEA中指定Debug服务器

图片说明

3.3、远程服务器防火墙端口放行

# 1、直接关闭防火墙
systemctl stop firewalld.service
# 2、开启某个端口并重启
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

3.4、重启服务

4、被动连接调试

首先需要IDEA配置监听,如主动连接调试的IDEA配置图片,Debugger mode选择:Listen to remote JVM,配置本地监听端口,比如默认5005。点击Debug开始等待远程连接调试。

4.1、Tomcat

# 配置远程服务启动脚本
JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:5005,suspend=y"

4.2、Spring Boot

参数含义和主动连接调试一样,只是这里suspend=y表示启动时就中断,需要连接本地IDE调试启动。address=ip:port,ip需要修改为本地的对外IP

# 命令行添加选项,并重启,注意新参数必须在 -jar 之前
java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:5005,suspend=y -jar springbootfirst.jar

5、开始调试

6、关闭调试

标签:socket,Idea,联调,线上,本地,address,Debug,远程,调试
来源: https://www.cnblogs.com/xslient/p/16355562.html