Intellij IDEA基于Springboot的远程调试
  TEZNKK3IfmPf 2023年11月13日 24 0

相信很多人在开发中遇到过这样的问题, 就是明明代码在自己的环境上是好的, 为什么去了测试环境就有问题, 这个时候你可能会质疑测试, 是不是准备的数据有问题?还是不会使用, 导致用错了场景? 还是部署有问题?

在做数据项目的时候, 遇到bug可能会把相应的数据下载到本地开发环境, 然后进行debug, 但如果遇到了如下的问题, 该怎么办呢

  • 数据量特别大, 本地无法下载
  • 数据比较敏感, 安全原因不让下载
  • 本地无法搭建环境, 比如, 需要启动cluster, 需要至少三台物理节点
    这个时候远程debug就要上场了, 这样你就能在本地看到远端运行的样子了, 而不用只看输出日志去推断可能哪里出了错误.

远程调试就是服务端程序运行在一台远程服务器上,我们在本地服务端的代码中设置断点(本地的代码必须与远端一致),进行调试。每当有请求到达远程服务器时能够在本地知道远端程序的运行情况。

增加remote

选择Edit Configurations

Intellij IDEA基于Springboot的远程调试

远程项目修改重启命令

nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10201 -jar openstack_learning-0.0.1-SNAPSHOT.jar > lys.log &

本地运行

Intellij IDEA基于Springboot的远程调试

 

远程项目会打印日志

Listening for transport dt_socket at address: 10201

执行debug一下,可以远程调试,并获取远程的环境信息

Intellij IDEA基于Springboot的远程调试

远程调试原理

Java远程调试的原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。

调试器通过debug协议(JDWP, Java Debug Wire Protocol)与被调程序进行通信,实现远程调试。

DEBUG选项参数的意思

nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10201 -jar openstack_learning-0.0.1-SNAPSHOT.jar > lys.log &

jdwp是Java Debug Wire Protocol的缩写
server=y表示是监听其他debug client端的请求。
suspend表示是否在调试客户端建立连接之后启动 VM。如果为y,那么当前的VM就是suspend直到有debug
address=10201 表示端口是10201

未连接

Intellij IDEA基于Springboot的远程调试

客户端连接后

Intellij IDEA基于Springboot的远程调试

客户端断开

Intellij IDEA基于Springboot的远程调试

注意

  • 请确保你在的security group允许相应的debug端口号暴露, 例如10201
  • 因为远程debug连接一个host, 如果你的debug断点无法命中, 所以请确保你的cluster是否只有一个实例, 如果出现双主, 多实例的情况有可能导致断点无法命中
  • 请确保你远端运行的代码是和你本地代码一致的, 否则可能会出现不可预知的行为, 因为远程debug是按照行号来映射的
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
TEZNKK3IfmPf