IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> IDEA实现远程DEBUG调试 -> 正文阅读

[开发工具]IDEA实现远程DEBUG调试

说明:这里主要描述,如何通过IDEA开发工具实现远程DEBUG调试。
开发环境:JDK 8
开发工具:IDEA 2019

一、什么是远程DEBUG调试?

通俗的说,远程DEBUG就是断点打在本地环境, 但是代码是跑在远端的。

二、为什么使用远程DEBUG?

一般我们写完代码都会先在本地进行接口自测。如果发现问题,可以直接开启DEBUG模式,进行问题的定位、排查和解决。但往往有些时候,本地自测是没问题的,可是测试环境、生产环境却出了问题。
在这里插入图片描述

“这…我本地测试确实没问题…”
“还敢狡辩,给我查,查不出来的话…”

既然问题出现了,那就想办法解决白。可是问题出现在线上,本地又复现不了…有时候日志也排查不出来…这可咋整?

别急别急!这不,远程DEBUG他来了,他来了!!!
在这里插入图片描述

三、实现远程DEBUG的原理

实现原理:
在这里插入图片描述
Debugger 和 Target VM分别在各自的进程中运行,他们之间的通信协议就是 JDWP。

JDWP(Java DEbugger Wire Protocol):即Java调试线协议,是一个为Java调试而设计的通讯交互协议,它定义了调试器(如:IDEA工具)和被调试程序(服务器虚拟机中运行的程序)之间传递的信息的格式。通过该协议,Debugger 端(本地)可以和 target VM(服务器上运行的程序) 进行通信,可以获取目标 VM的类、对象、线程等信息。

JVM本身提供了一个调试工具JDB,支持设置断点及线程级的调试,不同的JVM通过接口的协议进行联系,使得本地的环境可以远程JVM建立联系和通信。像IDEA、Eclipse只是做了这一层的支持。

四、IDEA中如何实现远程DEBUG?

4.1、POM依赖中配置jvmArguments

pom依赖中需添加【jvmArguments】配置。添加完此配置,打包后的项目发布到服务器上,可支持远程DEBUG。具体操作如下:

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
      <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments>
   </configuration>
</plugin>

在这里插入图片描述
具体参数详解:

【-Xdebug】:通知JVM工作在DEBUG模式下。

【-Xrunjdwp】:通知JVM使用(Java debug wire protocol)运行调试环境。

【transport】:指定调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式。据说:dt_shmem只适用于Windows平台。

【address】:调试服务器的端口号,客户端用来连接服务器的端口号(一般工具中默认5005端口)。

【server=y/n】:VM 是否需要作为调试服务器执行(选择y)。

【suspend=y/n】:是否在调试客户端建立连接之后启动 VM。

4.2、打JAR包

图片: https://uploader.shimo.im/f/G2xhSwr4QmoXzViX.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzEwOTM3NTAsImciOiJLODM4S0NncnlZM1BWSnJxIiwiaWF0IjoxNjMxMDkzNDUwLCJ1c2VySWQiOjY1NTk2MjQ5fQ.-jqTgz7HeyC58jrovVaD898H87djzJCNpJlqbUl9Wb8
jar包在target目录下:
图片: https://uploader.shimo.im/f/ae3va0ihaxLmpjwQ.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzEwOTM3NTAsImciOiJLODM4S0NncnlZM1BWSnJxIiwiaWF0IjoxNjMxMDkzNDUwLCJ1c2VySWQiOjY1NTk2MjQ5fQ.-jqTgz7HeyC58jrovVaD898H87djzJCNpJlqbUl9Wb8

4.3、部署JAR运行时配置参数

jar文件上传到服务器之后,运行jar文件需要配置参数。

执行以下命令:

nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar test-0.0.1-SNAPSHOT.jar &

JDK版本不同,JVM参数也是不同的(感兴趣的话可以自行了解下),这里以jdk8版本为例进行远程调试。

关于-agentlib:

Java Agent (Java 探针 ),在 JDK1.5 引入的,是一种可以动态修改 Java 字节码的技术。Java 类编译之后形成字节码被 JVM 执行,在 JVM 执行这些字节码之前获取到该字节码信息,通过字节码转换器对这些字节码进行修改,可以指定一些功能。

比如常见的java代码做调试,其实就利用了jre自带的jdwp agent来实现的,其中agentlib参数就是用来跟要加载的agent的名字,比如这里的jdwp。(更多了解,认准官网)

可通过 ps -ef | grep java 命令查看运行中的jar。

图片: https://uploader.shimo.im/f/0xzQscyPwRpbIPeW.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2MzEwOTM3NTAsImciOiJLODM4S0NncnlZM1BWSnJxIiwiaWF0IjoxNjMxMDkzNDUwLCJ1c2VySWQiOjY1NTk2MjQ5fQ.-jqTgz7HeyC58jrovVaD898H87djzJCNpJlqbUl9Wb8

4.4、IDEA中配置RemotDebug

1、点击Edit Configurations---->点击新增---->选择Remote
在这里插入图片描述
可以看到默认的配置,如下图。
在这里插入图片描述
我们进行自定义配置,填写服务器IP和调试用的端口号。
在这里插入图片描述
运行IDEA进行远程调试。
在这里插入图片描述
验证远程DEBUG调试是否可行。(尝试打上断点,请求服务器端接口)
在这里插入图片描述
如下图所示,可以看到跳进了断点。
在这里插入图片描述
OK,这个时候我们就可以开始DEBUG了,是不是方便找问题了!

五、远程DEBUG调试的优、缺点?

优点:把断点打在本地,直接访问线上程序即可,方便调试。(线上程序出了问题,无法根据log进行排查时)。

缺点:可能会造成“阻塞”。(同一程序中,本地断点没走完之前,别的接口请求可能会“阻塞”)。

总结:使用这种方式,有利有弊,根据不同场景判断是否使用。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:59:09  更:2021-09-09 12:01:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:31:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码