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

本文主要介绍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.mzph.cn/news/131198.shtml

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

相关文章

Python与CAD系列高级篇(十八)文本前后缀及部分内容替换

0 简述 本篇介绍以下几项功能开发:1.选择文本并将指定前缀替换为特定文字;2.选择文本并将指定后缀替换为特定文字;3.选择文本并将指定部分内容替换为特定文字。 1 选择文本并将指定前缀替换为特定文字 需求: ① 用户定义需要替换的文本前缀及替换后的文字。 ② 将选中的文本…

生成带分表和水印的excel压缩文件

功能描述 将查询结果生成带分表和水印的excel压缩文件 功能点 1、将查询结果导出为excel文件 2、每个表格存放50万条数据&#xff0c;超过50万条数据&#xff0c;生成新的分表 3、生成的表格需要添加水印 4、将生成的全部分表&#xff0c;打包成zip压缩文件 引入依赖 <…

33. 搜索旋转排序数组(二分法)

1、算法思路 题目要求必须设计一个时间复杂度为 O(log n) 的算法解决此问题&#xff0c;所以我们可以采用二分法。 Step1. 先把 nums[0] 作为目标值&#xff0c;通过二分法找到旋转点索引&#xff1b; Step2. 如果旋转点索引为0&#xff0c;则数组本身就是升序的&#xff0c…

在C++中,当无符号数和有符号数进行减法运算时,通常有符号数会被转换为无符号数

一段程序引发的问题&#xff1a; for (int i 0; i < s.length() - L; i) {string str s.substr(i, L);if ( hash[str] 2) {res.push_back(str);}} }terminate called after throwing an instance of std::out_of_rangewhat(): basic_string::substr: __pos (which is 2…

SpringMVC Day 11 : 零 xml 配置

前言 欢迎来到《Spring MVC Day 11: 零XML配置》&#xff01;在之前的学习中&#xff0c;我们已经掌握了如何使用Spring MVC框架构建灵活、高效的Web应用程序。然而&#xff0c;我们可能还记得那些繁琐的XML配置文件&#xff0c;它们是我们在过去几天中使用的方式。 好消息是…

软考高项-配置管理相关论文

论文思路 制订配置管理计划 配置管理的目标和范围配置管理角色和责任安排建立了开发库、受控库、产品库三个配置库配置项识别 识别配置项目需求、设计文档、程序代码、项目管理计划等内容&#xff0c;配置项分配一些属性&#xff0c;比如配置项的名称、编号、版本号、责任人等…

Stable Diffusion 的提示词使用技巧

推荐Stable Diffusion自动纹理工具&#xff1a; DreamTexture.js自动纹理化开发包 什么是提示语&#xff1f; 提示语是人工智能中的一个重要组成部分&#xff0c;尤其是自然语言处理 &#xff08;NLP&#xff09;。在AI自人工智能中&#xff0c;想要获得好的效果&#xff0c;简…

JavaScript执行上下文和调用栈

上节课我们已经说过了&#xff0c;JavaScript的代码执行是发生在js引擎中的调用堆栈的&#xff0c;但是具体是如何运行的&#xff0c;我们来详细剖析一下 如何执行上下文 执行上下文&#xff1a; 执行上下文是指在JavaScript中代码被执行时所创建的环境。它包含了变量、函数、…

pam_radius库的使用

一. 前言 我们知道&#xff0c;linux pam库是一系列的库&#xff0c;用于处理一些应用程序的认证工作&#xff0c;比如login程序。但是默认的pam库只是用于本地认证&#xff0c;也就是认证的用户名和密码存储在本机上。如果需要远程认证&#xff0c;比如向radius服务器认证&…

uni-app学习笔记

目录 一、前期准备 1、项目认识 2、pages.json基本配置 3、创建页面 二、tabBar 1、获取图标 2、代码配置 三、基础认识 1、页面生命周期 2、App.vue应用生命周期 四、基础组件 1、scroll-view可滚动视图区域 2、提示框 3、swiper滑块视图容器 4、form表单组件 一…

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…

新手入门Python一定要看的八个超实用建议!

文章目录 前言一、项目文件事先做好归档二、永远不要手动修改源数据并且做好备份三、做好路径的正确配置四、代码必要的地方做好备注与说明五、加速你的Python循环代码六、可视化你的循环代码进度七、使用高效的异常捕获工具八、要多考虑代码健壮性关于Python技术储备一、Pytho…

[PyTorch][chapter 61][强化学习-免模型学习1]

前言&#xff1a; 在现实的学习任务中&#xff0c;环境 其中的转移概率P,奖赏函数R 是未知的&#xff0c;或者状态X也是未知的 称为免模型学习&#xff08;model-free learning&#xff09; 目录&#xff1a; 1: 蒙特卡洛强化学习 2&#xff1a;同策略-蒙特卡洛强化学习 3&am…

JavaFX作业

前言&#xff1a; 在写这个作业之前&#xff0c;尝试在JavaFX中添加全局快捷键&#xff0c;测试了大概5个小时&#xff0c;到处找教程换版本&#xff0c;结果最后还是没找到支持Java8以上的&#xff08;也有可能是我自己的问题&#xff09;&#xff0c;最后只能退而求其次&…

手写数字识别--神经网络实验

实验源码自取&#xff1a; 我自己搞的代码&#xff0c;预测精度才94% 神经网络实验报告源码.zip - 蓝奏云 老师给的实验源码答案和资料&#xff0c;预测精度高达99% 深度学习实验报告.zip - 蓝奏云 上深度学习的课程&#xff0c;老师布置了一个经典的实验报告&#xff0c;我做…

libpcap之数据分流

当前系统都是多核系统&#xff0c;为了充分利用多核优势&#xff0c;数据包可以在底层就进行分流&#xff0c;可以通过多线程/多进程对同一个接口的数据进行并行的处理。 一、实验 一个server/client程序一个简单的抓包程序&#xff0c;抓取server/client之间的通信数据 1.1 …

如何利用Python实现分词和NER的Web服务

大家都知道python在数据处理、数据分析和机器学习等方面的强大之处&#xff0c;那么如何使用Python实现Web方式的HTTP应用和服务呢&#xff0c;其实有很多种方式&#xff0c;比如利用gradio、streamlit实现web应用&#xff0c;利用FastApi实现web服务等等&#xff0c;具体详见之…

【蓝桥杯 第十四届省赛Java B组】真题训练(A - C)正在更新

目录 A、阶乘求和 - BigInteger B、幸运数字 - 字符串 进制转换 暴力大法 C、数组分割 - A、阶乘求和 - BigInteger 思路&#xff1a; 当时比赛时&#xff0c;拿计算器算的&#xff0c;然后辛辛苦苦也没对 看到这个数肯定很大&#xff0c;而且只求后9位&#xff0c;阶乘越…

【计算机网络】应用层

应用层协议原理 客户-服务器体系结构&#xff1a; 特点&#xff1a;客户之间不能直接通信&#xff1b;服务器具有周知的&#xff0c;固定的地址&#xff0c;该地址称为IP地址。 配备大量主机的数据中心常被用于创建强大的虚拟服务器&#xff1b;P2P体系结构&#xff1a; 特点&…

K8S知识点(二)

&#xff08;1&#xff09;K8S概念 K8S是通过控制pod来控制容器进而控制程序的 service是沟通Pod和外键的桥梁&#xff0c;可以实现负载均衡的效果&#xff0c;加权负载的效果 &#xff08;2&#xff09;环境搭建-环境规划 &#xff08;3&#xff09;环境搭建-主机安装 使用…