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

2023-11-05 21:15

本文主要是介绍本地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.需要稳定的网络连接以保证调试会话不会中断。

这篇关于本地idea远程调试服务器程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352549

相关文章

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

IDEA接入Deepseek的图文教程

《IDEA接入Deepseek的图文教程》在本篇文章中,我们将详细介绍如何在JetBrainsIDEA中使用Continue插件接入DeepSeek,让你的AI编程助手更智能,提高开发效率,感兴趣的小... 目录一、前置准备二、安装 Continue 插件三、配置 Continue 连接 DeepSeek四