本地idea远程调试服务器程序

news2024/12/28 4:45:23

本文主要介绍idea本地调试远程服务器程序的方式。相信很多同行跟我一样,在最初接触公司项目的时候,遇到测试提出的缺陷,往往会在本地进行调试、替换jar包远程调试等方式,本地调试往往会导致数据和环境不一致的问题使得问题无法复现,替换jar包也回因为需要替换的模块可能涉及其它功能,产生冲突。接下来先简单说下本地远程调试服务器程序的应用场景及优势。

应用场景

  1. 生产问题诊断: 当在生产环境中发现特定的问题时,这些问题在开发环境中无法复现,远程调试可以帮助开发人员直接在生产环境中诊断问题。
  2. 环境特定的错误: 某些错误可能只在特定的环境配置或数据下出现,使用远程调试可以直接在这样的环境下调查问题。
  3. 第三方服务集成: 当应用程序需要与部署在远程服务器上的第三方服务集成时,本地调试可以帮助理解和解决集成问题。
  4. 性能调优: 对于需要访问大量生产数据或者复杂环境的性能调优,远程调试可以提供实时的反馈。
  5. 多服务调试: 对于微服务架构,可以在不同服务间进行远程调试,以理解服务间的交互和潜在问题。

优势

  1. 不中断服务: 无需停止服务器上的服务或应用程序,可以在运行时进行调试。
  2. 实时调试: 可以在代码实际运行的环境中进行实时调试,获得即时反馈。
  3. 便捷性: 开发人员可以在自己熟悉的开发环境中使用全部调试工具,无需登录到远程服务器上。
  4. 安全性: 减少了在生产服务器上直接编辑代码的需要,从而降低了操作风险。
  5. 节约资源: 无需在本地设置复杂的模拟环境,节省了资源和配置时间。
  6. 断点和日志: 可以像本地应用程序一样使用断点和查看日志输出,使得问题定位更为直观。
  7. 代码一致性: 确保正在调试的代码与服务器上运行的代码一致,避免版本不一致带来的混淆。

接下来就正式介绍如何使用idea远程调试测试服务器程序。主要分为两步:1.服务器程序以调试模式启动。2.本地idea配置调试模式并以debug方式启动。

一、服务器调试模式启动

要让Java程序在远程服务器上以调试模式运行,你需要在启动时指定JVM参数,以便打开远程调试端口。以下是一组常见的参数:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar

解释:

  • transport=dt_socket:使用基于套接字的调试。
  • server=y:作为调试服务器运行。
  • suspend=n:指定JVM启动时不暂停,suspend=y会使得JVM在调试器连接之前暂停。
  • address=*:5005:打开端口5005以监听远程调试连接,*表示监听所有网络接口。

Java虚拟机(JVM)参数可以通过多种方式设置,以便以调试模式运行Java应用程序。以下是根据不同方式设置JVM以启用远程调试的示例:

1. 命令行

在命令行中直接添加JVM参数来启动应用程序。

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar
2. 环境变量

你可以设置一个环境变量,例如JAVA_OPTS_JAVA_OPTIONS,并在启动应用程序时包含它。

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
java $JAVA_OPTS -jar your-application.jar
3. 在IDE中

在IDE中,比如IntelliJ IDEA或Eclipse,你可以在运行/调试配置中设置JVM参数。

对于IntelliJ IDEA:

  • 打开Run -> Edit Configurations...

  • VM options字段中输入调试参数:

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
    
4. Maven或Gradle中

如果你使用Maven或Gradle,可以在其配置文件中设置JVM参数。

对于Maven,可以在pom.xml文件中配置maven-surefire-plugin插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005</argLine>
    </configuration>
</plugin>

对于Gradle,可以在build.gradle中设置:

test {
    jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005'
}
5. Docker容器

如果你的应用程序运行在Docker容器中,你可以在Dockerfile中设置环境变量,或者在启动容器时通过命令行参数设置。

Dockerfile中:

ENV JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"

或者在启动容器时:

docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" -p 5005:5005 -d your-image
二、idea设置与启动

打开Run菜单,选择Edit Configurations。点击左上角的**+(Add New Configuration)按钮,选择Remote**。
在这里插入图片描述

启动配置好的远程调试:

  1. 选择你刚刚创建的远程调试配置。
  2. 点击工具栏上的Debug图标(一个小虫子图标),或者使用快捷键 Shift+F9

此时,IntelliJ IDEA将尝试连接到远程服务器上打开的调试端口。一旦连接成功,你就可以像调试本地程序一样设置断点、检查变量和执行步进操作。
在这里插入图片描述

注意事项

1.请确保在所有这些示例中,远程调试端口(如5005)未被防火墙或任何网络策略阻塞,并且你的安全设置允许你从IDE连接到远程服务器上的这个端口。

2.确保调试端口不对外暴露,避免安全风险。

3.远程调试可能会影响应用程序性能,不宜在高峰时段进行。

4.必须确保拥有足够权限在远程服务器上启动调试模式。

5.需要稳定的网络连接以保证调试会话不会中断。

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

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

相关文章

机器学习领域经典书籍推荐

机器学习领域经典书籍 1. 数据挖掘概念与技术2. 机器学习3. 统计学习方法4. 深度学习5. 动手学深度学习&#xff08;PyTorch版&#xff09; 1. 数据挖掘概念与技术 原名: Data Mining&#xff1a;Concepts and Techniques&#xff0c;Third Edition 作者: &#xff08;美&#…

Solidity入门第一步之数据类型

各种类型介绍 数值类型(Value Type)&#xff1a;包括布尔型(bool)&#xff0c;整数型(int、uint、uint256)等等&#xff0c;这类变量赋值时候直接传递数值。引用类型(Reference Type)&#xff1a;包括数组和结构体&#xff0c;这类变量占空间大&#xff0c;赋值时候直接传递地…

Leetcode—707.设计链表【中等】

2023每日刷题&#xff08;十七&#xff09; Leetcode—707.设计链表 设计单链表实现代码 typedef struct Node {int val;struct Node* next; } MyLinkedList;MyLinkedList* myLinkedListCreate() {MyLinkedList* mList (MyLinkedList *)malloc(sizeof(MyLinkedList));mList-…

chroot

1.chroot技术 在Linux系统中&#xff0c;系统默认的目录结构都是以/&#xff0c;即根(root)开始的。而在使用chroot之后&#xff0c;进程的系统目录结构将以指定的位置作为根(/)位置。chroot实际作用就是将进程描述符中struct fs_struct中的root的值设置为选定的目录。 在经过…

深度学习之基于Yolov5人体姿态摔倒识别分析报警系统(GUI界面)

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 系统设计概述&#xff1a; 传感器采集&#xff1a;通过在场景中布置摄像头或红外传感器等设备&#xff0c;采集人体…

latex自定义缩写

Latex 写文章可能常用到一些缩写&#xff0c;如&#xff1a; .e.g.i.e.cf.etc.w.r.t.i.i.d.et al. 其中有些要斜体&#xff0c;如果每次都要用 \textit{...}、{\it ...} 弄斜&#xff0c;有点麻烦。CVPR 模板中有定义一些命令&#xff0c;可以更方便地输入这些缩写。这里记录…

openebs

1. 简介 OpenEBS是一款使用Go语言编写的基于容器的块存储开源软件。OpenEBS使得在容器中运行关键性任务和需要数据持久化的负载变得更可靠。 OpenEBS是一组存储引擎&#xff0c;允许您为有状态工作负载(StatefulSet)和Kubernetes平台类型选择正确的存储解决方案。 在高层次上…

CCF-CSP真题《202309-4 阴阳龙》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-4试题名称&#xff1a;阴阳龙时间限制&#xff1a;2.0s内存限制&#xff1a;1.0GB问题描述&#xff1a; 问题描述 西西艾弗岛的下方是一个庞大的遗迹群&#xff0c;神…

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面&#xff0c;让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…

Go语言文本处理:正则表达式与字符串操作

大家好&#xff0c;我是[lincyang]。 今天&#xff0c;我们将一起探讨Go语言在文本处理方面的强大功能&#xff0c;特别是正则表达式和字符串操作。 Go语言以其简洁和高效而闻名&#xff0c;这些特性在文本处理上也得到了很好的体现。 接下来&#xff0c;我将通过丰富的案例…

FPGA的元素组件

注意&#xff1a;关于FPGA的元素这一块儿内容&#xff0c;稍有出入。例如&#xff1a;吉姆莱丁 著&#xff0c;陈会翔 译&#xff0c;由清华大学出版社出版的《构建高性能嵌入式系统》中提到&#xff1a;FPGA通常由查找表、触发器、块RAM、DSP切片、及其他功能元件等元素组成。…

C语言----每日五道选择题Day1

1.第一题 1、指出下列代码的缺陷&#xff08; &#xff09;【多选】 float f[10]; // 假设这里有对f进行初始化的代码 for(int i 0; i < 10;) {if(f[i] 0)break; } A: for(int i 0; i < 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是…

C++初阶--类与对象--const成员和日期类的实现

文章目录 const 成员对一个日期类的实现源码解析构造函数的验证运算符的重复利用前置与后置其他运算符的验证 const 成员 将const修饰的成员函数称之为const成员函数。 在一个成员函数里面&#xff0c;对于this指针指向的对象&#xff0c;是隐藏式的&#xff0c;没有办法用常规…

B-DS二叉树_输出所有目标路径

Description 给定二叉树和一个整数目标targetSum&#xff0c;输出所有从根结点到叶子结点的路径总和等于targetSun的路径。 Input 第一行输入t&#xff0c;表示有t个测试样例。 第二行起&#xff0c;每一行首先输入一个整数targetSum&#xff0c;接着输入n&#xff0c;接着输…

带你拿捏链表

本专栏内容为&#xff1a;数据结构学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握数据结构。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;数据结构 &#x1f69a;代码仓库&#xff1a;小小u…

Mega Sales购物季营销,掌握流量密码不是事

“Mega Sales”购物季是东南亚地区“双十一、双十二”的两个重要节点&#xff0c;在年末即将来临之际&#xff0c;全球电商市场都正进入激动人心的备货大卖时期。面对这样的重要节目&#xff0c;商家应该如何做好营销铺垫&#xff0c;全面备战大促的不同阶段&#xff1f; 作为…

C生万物 | 从浅入深理解指针【第三部分】(qsort的使用和模拟实现)

C生万物 | 从浅入深理解指针【第四部分】&#xff08;qsort的使用和模拟实现&#xff09; 文章目录 C生万物 | 从浅入深理解指针【第四部分】&#xff08;qsort的使用和模拟实现&#xff09;回调函数是什么&#xff1f;qsort使用举例qsort函数的模拟实现 回调函数是什么&#x…

网络层:控制平面

路由选择算法 路由选择算法就是为了在端到端的数据传输中&#xff0c;选择路径上路由器的最好的路径。通常&#xff0c;一条好的路径指具有最低开销的路径。最低开销路径是指源和目的地之间具有最低开销的一条路。 根据集中式还是分散式来划分 集中式路由选择算法&#xff1a…

从UEFI如何启动到系统

从UEFI如何启动到系统 文章目录 从UEFI如何启动到系统UEFI须知1. 进入UEFI setup界面2. Setup界面3. BootManager界面4. Shell下操作4.1. 显示启动设备4.2. 进入设备及查看文件4.3. UEFI下的其他操作4.4. UEFI下的一些Shell命令 5. UEFI下更新固件方法GRUBGRUB界面1. 编辑GRUB选…

为什么搭建自己的帮助中心很重要?

在当今数字化和信息爆炸的时代&#xff0c;用户对产品和服务的期望越来越高。他们希望能够快速找到解决问题的方法和答案&#xff0c;而不是在不尽其穷的文档和论坛中浪费时间。在这样的背景下&#xff0c;建立一个完善的帮助中心成为了企业提供优质客户支持的关键。帮助中心不…