IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南

news2024/11/25 15:23:08

引言

在开发分布式系统时,调试是一个重要但复杂的环节。开发者通常需要跨越多个服务、模块和线程来追踪和解决问题。在没有远程调试的情况下,许多开发者会在代码中添加各种日志语句,然后重新部署和上线来调试。这种方法不仅费时,而且可能引入额外的错误或问题。

有时候,在本地环境中调试时没有发现问题,但当代码被打包并部署到测试环境时,却会出现一堆莫名其妙的问题。这可能是因为不同的环境、配置或服务之间的交互导致了问题的出现。

幸运的是,有一种强大的工具可以帮助解决这些问题,那就是远程调试。通过远程调试,开发者可以在远程服务器上直接对Java应用程序进行调试,就像在本地环境中一样。这样,就可以避免重新部署和上线的耗时过程,并且可以实时查看和修改变量的值、查看堆栈信息等。

本文将介绍如何使用IntelliJ IDEA的远程调试功能来高效调试分布式系统。此外,我们还将探讨一些常见的调试问题和解决方法,帮助你更好地应对分布式系统开发中的挑战。

1、准备工作

1、确保你的IDEA已经安装并配置好,且已安装了Java开发工具包(JDK)。
确保你的Java应用程序已经部署到远程服务器上,并且可以通过远程访问进行调试。

2、启动调试应用

使用特定JVM参数运行服务端代码
要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}

或者

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555
将address设置为127.0.0.1:5555,表示将调试端口限制为本地访问,远程无法访问, 设置参数应该注意

其中的${debug_port}是用户自定义的,为debug端口,本例以5005端口为例。
如果只是临时调试,在端口号前面不要加上限制访问的IP地址,调试完成之后,将上述JVM参数去除掉之后重新发布下,防范开放远程调试端口可能带来的安全风险。

java  -Dspring.config.location=application-pre.yml  -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar  fubaodai-app-1.0-SNAPSHOT.jar

在这里插入图片描述

3、配置远程调试

  1. 在IDEA中,打开"Run/Debug Configurations"对话框。
  2. 在对话框中,点击"+“按钮,选择"Remote”。
  3. 在弹出的对话框中,填写远程服务器的连接信息,包括服务器IP地址、端口号、调试协议等。
  4. 点击"OK"按钮保存配置。
    在这里插入图片描述
    在这里插入图片描述
    或者 Remote
    在这里插入图片描述

4、本地IDEA启动debug模式

在这里插入图片描述

**要求:**双方代码一致,否则远程调试无法启动;
本地启动刚刚配置的 Remote Server,正常时会看到日志:

Connected to the target VM, address: 'xxx:5005', transport: 'socket'

在这里插入图片描述

5、设置断点,开始调试

本地 IDEA 代码中设置断点
浏览器或手机 HTTP 访问服务器
IDEA 即可在断点暂停并跟踪
在这里插入图片描述

6、远程调试的问题和注意事项

  1. 确保远程服务器的Java版本和IDEA的Java版本一致。
  2. 确保远程服务器的防火墙设置允许IDEA的调试连接通过。
  3. 确保远程服务器上已经安装了所需的调试工具(如jdb)。
  4. 在远程调试时,需要注意保护敏感信息,如密码、密钥等。
  5. 在修改代码时,需要同步远程服务器上的代码,以免出现版本不一致的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 编辑器资源导入处理函数 OnPostprocessTexture :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPostprocessTexture 用法 点击封面跳转下载页面 简介 在Unity中,我们可以使用编辑器资源导入处理函数(OnPostprocessTexture)来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的&…

Seal梁胜:近水楼台先得月,IT人员应充分利用AI解决问题

2023年9月2日,由平台工程技术社区与数澈软件Seal联合举办的⌈AIGC时代下的平台工程⌋——2023平台工程技术大会在北京圆满收官。吸引了近300名平台工程爱好者现场参会,超过3000名观众在线上直播平台观看了本届大会。 数澈软件 Seal 联合创始人梁胜博士和…

mysql文档--默认存储引擎--innodb存储引擎--innodb引擎全解

阿丹: 在mysql中innodb是默认的存储引擎。研究一下为什么它会被独宠。 官方解释: InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发&#xf…

活动报名场地预约自定义表单小程序开发

活动报名场地预约自定义表单小程序开发 专门为活动报名开发的一款小程序,可以自定义各种活动报名、活动预约,支持付费预约报名。 功能: 自定义字段:字符串、单选、复选、日期、列表、图片、城市、关联字段等自定义字段类型配置…

浅谈 Node.js 与快速入门使用——前端开发工程师必须要知道的技术(文末送书福利6.0)

文章目录 📋前言🎯什么是 Node.js🎯安装与使用 Node.js🧩直接安装 Node.js🧩使用 Node Version Manager(NVM)🧩使用 Node.js 🎯Node.js 基础知识🧩模块系统&a…

matplotlib 使用

import matplotlib.pyplot as plt %matplotlib inlineplt.figure()#创建一个画布 plt.plot([1, 0, 9], [4, 5, 6])#点数据,横坐标,纵坐标,相当于(1,4)(0,5)(9…

蒙特卡洛仿真

首先打开ADE,设置好要仿真的analysis以及output,工艺角选择mc 在ADE里面选择Launch-ADE XL,勾选想要仿真的输出(我这里要仿真的是DC电压)。 下图的输出结果要起好名字、type里面signal出来的结果是曲线图柱状图。expr(表达式&…

天纵竞赛系统助力22届汉语桥世界大学生中文比赛

由教育部中外语言交流合作中心主办的第22届“汉语桥”世界大学生中文比赛在广西举行。本届比赛共有来自120个国家的138名选手参加。“汉语桥”世界大学生中文比赛创办20多年来,吸引了全球160多个国家和地区的150多万青年学子参与,已成为具有世界影响力和…

如何实现OPC UA远程通讯?

目录 一. 准备工作 1.1 在对接前我们需准备如下物品 1.2 EG20网关准备工作 1.3 软件和下位机准备工作 二. EMCP平台设置 2.1 新增EG设备 2.2 网关绑定 2.3 通讯参数设置 2.4 创建设备驱动 2.5 报警信息设置 2.6 历史报表管理 2.7 画面组态 三. 实验效…

(2022|CVPR,LDM)使用潜在扩散模型进行高分辨率图像合成

High-Resolution Image Synthesis with Latent Diffusion Models 公众号:EDPJ(添加 VX:CV_EDPJ 进交流群获取资料) 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 感知图像压缩 3.2 潜在扩散模型 3.3 调节机制 4. …

EF框架基础应用入门

文章目录 一、介绍二、EF6框架基础1. 数据模型和实体类2. 数据库上下文(DbContext)介绍3. 配置数据模型与数据库表的映射关系 两种方式Fluent API和数据注解Fluent API数据注解 4. 数据库迁移(Migration)概述a. 创建初始迁移b. 更…

需求评审时如何平衡团队成员间意见?

需求评审对于产品经理而言非常重要,通过需求评审我们可以提前规避可能的需求风险,减少因返工造成的资源浪费。如果不进行需求评审,这将直接影响项目的风险指数。 那么我们应该如何做好需求评审,有哪些需要注意的维度?如…

umi/max如何给请求增加公共header

直接上代码 根据 umi官网 介绍可知,umi/max仅提供一种运行时配置的方法。 如果是搭配typescript开发的话,最好使用umi/max提供的RequestConfig类型进行字段控制。 因为是在app.ts中添加的配置,但是并不知道该配置是在何时何地如何被使用的&…

swagger---接口文档管理生成管理工具

Swagger–接口生成工具 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具, 就可以做到生成各种格式的接口文档,以及在线接口调试页面等等。 官网: https://lswagger.io/knife4j是为Jav…

业务逻辑漏洞复现

文章目录 一分钱买夹克任意商品购买 一分钱买夹克 登录portswigger,在all-labs中选择下面的题目: 打开后选择第一个商品: 打开后数量选择1,并用bp拦截数据包,点击添加购物车: 修改价格为1,点…

解密全产业供应关系,助力企业寻找客户资源,洞察商机

在当今商业竞争日益激烈的时代,企业要实现长期可持续的发展,需要深入了解供应链关系,抢先捕获商机,拓展优质的客户资源。然而,供应链关系错综复杂,商机、客户隐藏在其中,如何挖掘和洞察成为了企…

力扣(LeetCode)算法_C++——寻找重复的子树

给你一棵二叉树的根节点 root ,返回所有 重复的子树 。 对于同一类的重复子树,你只需要返回其中任意 一棵 的根结点即可。 如果两棵树具有 相同的结构 和 相同的结点值 ,则认为二者是 重复 的。 示例 1: 输入:root…

五大类注解和方法注解详解

五大类注解为Controller,Service,Repository,Configuration,Component,方法注解为Bean。 需要注意的是:Bean注解必须要在类注解修饰的类内才能正常使用。 一、与配置文件的关系 在spring原生项目中 如果你使用的spri…

亚马逊运营中,卖家们应该怎么挑选产品?

如今做亚马逊,选品是非常重要的。“七分靠选品,三分靠运营”,这话虽然会得罪运营小伙伴,但是目前平台就是这么个情况,一款好的产品基本上不需要花太多心思,加上一些运营技巧就能够很快表现优异。 那么选品…

深入浅出了解BeanFactory 和 ApplicationContext

一.区别 BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。 1.依赖关系 BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean…