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

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值