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

相关推荐
不爱学习的YY酱29 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
丁总学Java35 分钟前
Maven项目打包,com.sun.tools.javac.processing
java·maven
kikyo哎哟喂1 小时前
Java 代理模式详解
java·开发语言·代理模式
duration~1 小时前
SpringAOP模拟实现
java·开发语言
小码ssim1 小时前
IDEA使用tips(LTS✍)
java·ide·intellij-idea
潜洋1 小时前
Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
java·spring boot·后端
暮志未晚Webgl2 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
小叶lr2 小时前
idea 配置 leetcode插件 代码模版
java·leetcode·intellij-idea
qq_429856572 小时前
idea启动服务报错Application run failed
java·ide·intellij-idea
瑞雨溪2 小时前
java中的this关键字
java·开发语言