【面试题】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) 发布到服务器的那个版本的代码,然后再进行远程调试。

相关推荐
qq_3331209716 小时前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++
mh_f16 小时前
33.批量通过GET链接下载图片到指定文件夹下
java
金銀銅鐵16 小时前
[Java] 如何理解 class 文件中方法的 access flags?
java·后端
智研数智工坊16 小时前
SpringBoot4.0.6 + Security7.x + JWT 最新完整实战|无状态权限认证、统一异常处理、可直接落地
java·spring boot·spring security·jwt·权限认证
DIY源码阁16 小时前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
Han_han91916 小时前
递归相关题目:
java
kTR2hD1qb16 小时前
Claude Code Skill的介绍与使用
java·前端·数据库·人工智能
汤米粥16 小时前
python学习——核心语法三
java·python·学习
basketball61616 小时前
Kadane算法 C++实现
java·c++·算法
better_liang17 小时前
每日Java面试场景题知识点之-如何设计分布式锁
java·redis·zookeeper·面试·分布式锁