【面试题】IDEA实现Debug远程调试Linux中的系统

有朋友面试时被问到,怎么远程调试部署在Linux中的系统?听到这个问题,那位朋友直接懵了,第一反应是震惊,已经部署在Linux中的系统还能调试? 沉默了几秒,只好说没有远程调试过Linux中的系统,一般线上问题都是看日志解决的,本地运行才通过调试解决。 那么,真的能在本地远程调试Linux系统吗?

接下来,介绍一下在IDEA中调试远程部署在Linux系统中的详细过程。

1、需求

项目已经部署到Linux服务器上,如何像在本地IDEA中运行时一样,可以进行断点联调呢?

2、解决方案

IDEA已经考虑了这种情况,自带远程调试功能。其它工具,像是Eclipse也一样可以。

大致步骤是,在服务启动时,开启远程调试的JVM参数,然后利用IDEA自带的远程调试工具,Remote JVM Debug 配置相应参数即可。

3、具体步骤

3.1 服务端

服务启动的时候,添加JVM支持远程调试的参数

复制代码
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8081
  • jdwp: Java Debug Wire Protocol(Java调试线协议)是Java平台提供的一种标准调试协议,它允许调试器与Java应用程序进行通信。
  • transport=dt_socket: 指定传输层使用的通信方式。这里 dt_socket 表示使用TCP/IP套接字作为传输机制。这使得调试器能够通过网络连接到正在运行的Java进程。
  • server=y 表示这个JVM实例将作为服务器端等待客户端(调试器)的连接。
  • suspend=n 表示JVM启动时不暂停执行。如果设为 suspend=y,则JVM会在启动后暂停,等待调试器连接。
  • address=5005 指定监听(调试)的端口号为8081。
3.2 IDEA配置

在IDEA中,打开远程服务运行的代码,不用启动项目,只要进行如下配置:

配置信息如下

点击OK,配置完成后,Debug启动remote,然后就可以开始调试了。

连接成功控制台会显示下面内容,虽然本地IDEA没有启动项目,但远程启动了项目,会自动与本地的代码进行匹配,达到与本地启动运行时一样的调试效果。

3.3 具体调试

和在本地IDEA运行服务一样调试,可以用Postman等测试工具访问对应接口,或者直接浏览器访问。访问后会进入到对应断点位置。

3.4 面试问题总结

如何远程调试的:服务器启动的时候设置JVM远程调试的参数(设置协议、调试端口)。

开发工具中添加对应的远程调试的配置启动项,设置调试的端口和服务器ip地址。

3.5 误区

一般公司或者企业的服务器是在内网环境下,很少有情况会关闭防火墙或者开放允许的调试端口的。所以,大部分情况下,远程调试都不被允许的。

这种情况下通常都是,看服务日志,定位具体问题,再解决问题。

如果可以远程调试,需要确保远程服务器的代码版本和IDEA中的代码版本是一致的,这样才能分析。不一致的话,可能会断点不准确。

通常情况,先git获取(check out) 发布到服务器的那个版本的代码,然后再进行远程调试。

相关推荐
Javatutouhouduan6 小时前
2026Java面试的正确打开方式!
java·高并发·java面试·java面试题·后端开发·java编程·java八股文
JAVA面经实录9176 小时前
Java初级最终完整版学习路线图
java·spring·eclipse·maven
Cat_Rocky7 小时前
k8s-持久化存储,粗浅学习
java·学习·kubernetes
知识领航员8 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
释怀°Believe8 小时前
Spring解析
java·后端·spring
ooseabiscuit8 小时前
Laravel4.x:现代PHP框架的奠基之作
java·开发语言·php
节奏昂9 小时前
【一份基础软件的下载地址和安装地址】
java
没什么本事9 小时前
关于C# panel 添加lable问题 -- 明确X和Y 位置错误
android·java·c#
dhashdoia10 小时前
GPT-5.5 代码开发实战:Codex与Browser Use深度集成与星链4SAPI优化方案
java·数据库·人工智能·gpt·架构
xuhaoyu_cpp_java10 小时前
SpringMVC学习(二)
java·经验分享·笔记·学习·spring