侧边栏壁纸
  • 累计撰写 1,975 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

IDEA如何进行远程Debug调试

猿哥
2022-01-03 / 0 评论 / 5 点赞 / 6,927 阅读 / 0 字

一、什么是远程调试

有时候代码部署到测试环境之后发现问题,但是在本地又不能重现,通常是数据不一致或者其他问题,本地无法定位,这时候就需要远程调试了。

二、远程调试的原理和核心

由于是对源码进行调试,源码经编译后运行在远程服务器上,并且在本地Idea IDE中打开源码。

本地虚拟机与远程虚拟机相互通信,远程虚拟机监控自身的栈帧,方法调用等运行信息,本地虚拟机通过Java API提供的可使用的调试接口,向远程虚拟机发送调试命令,并接受显示调试结果。

远程调试的核心:JPDA(Java Platform Debugger Architecture)框架。

image

三、远程调试的必备条件

本地的代码必须和远程服务器上的字节码是同一个版本,保持一致,否则IDEA无法启动。

通过前端请求进行远程调试,后端打断点失效常见原因

  1. 本地与远程代码不一致
  2. 远程IP,端口配置错误
  3. 本地源码与二进制代码不一致:实际JVM是基于二进制代码运行的,需要重新编译。

四、远程调试的步骤

4.1 本机IDEA配置

编辑配置--加号---远程JVM调试,输入远程主机,监听端口,选择jdk,使用的模块类路径。

image

命令行参数介绍:

  • -Xdebug 启用调试。
  • -Xrunjdwp :启用JDWP实现,

以下是子选项

  • transport=dt_socket : JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
  • address=8180:远程JVM在8180端口上监听请求。
  • server=y :y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是本机。
  • suspend=n : n表示调试时会暂停远程虚拟机。

4.2远程服务器配置

4.2.1 tomcat项目启动

Linxu系统: tomcat/bin/startup.sh开始处中增加如下内容:

```Plain Text declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8180"

8180为监听端口,要和本地IDEA的监听端口保持一致。

![image](/upload/2022/01/1641205751-d17d9f0f5bface9.png)

重启服务器即可。

#### 4.2.2 springboot项目启动
springboot项目使用如下命令启动即可。

```java
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8081,server=y,suspend=y -jar jar包名称

4.3 启动调试

远程服务器启动之后,即可启动本地的IDEA。

image

正常启动后,对线上环境进行操作,断点即可定位到我们本地的IDEA,可以像本地一样进行调试。

五、注意事项

5.1 远程调试的日志是在本地还是在远程服务器?

日志不会打印在IDEA的控制台上。

System.out 以及 log.info 还是打印在远程的。

5.2 调试时其他人会不会卡住?

使用远程调试时候,打了断点,别的人在测试这个页面的时候是会卡住的。

5.3 本地代码修复bug远程调用时候有效么

无效,运行的还是远程部署的jar中的代码

5.4 为什么网上有各种各样的启动参数

因为java1.4,java5-8,java9的是不一样的!在idea中可以选择版本自动切换。

image

5
博主关闭了所有页面的评论