当前位置: 首页 > news >正文

IDEA远程调试

1 概述

原理:本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。

被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。

调试程序的本地虚拟机:IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。

2 设置

2.1 IDEA 中指定 Debug 服务器

  • 点击主窗口菜单 Run / Edit Configurations,打开“Run/Debug Configurations”窗口;

  • 点击工具栏上的“+”按钮,下拉菜单中选择“Remote”;

  • 设置 Host 为远程服务器的域名或IP,保持 Port=5005 无需调整;

  • 复制命令行参数,形如 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

2.2 远程服务中开启 Debug 服务(对于个人项目部署到自己买的服务器上的情况,在职场基本不需要)

2.2.1 对于 SpringBoot

命令行添加选项,并重启:

## 注意新参数必须在 -jar 之前
jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar test.jar

2.2.2 对于 Tomcat

启动脚本中添加选项,并重启:

## sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

2.3 远程服务器防火墙端口放行

### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

3 开始调试

  • 要求:双方代码一致,否则远程调试无法启动;

  • 本地启动刚刚配置的 Remote Server,正常时会看到日志: Connected to the target VM, address: 'xxx:5005', transport: 'socket'

  • 本地 IDEA 代码中设置断点

  • 浏览器或手机 HTTP 访问服务器

  • IDEA 即可在断点暂停并跟踪

4 关闭调试

服务器上多开放个端口是不安全的,调试完毕后可恢复防火墙设置。

而 Java 服务器开启 Debug 服务器的功能可以保留,以便之后再次调试。

#k8s 查看服务的 pod的信息包括ip

kubectl get po -n namspace(命名空间) -o wide|grep 服务名

一般公司的远程debug只会开启测试环境的,生产是不允许远程debug,

因为远程debug是单线程的,如果你连接的是打了normal标签的pod,在你调试的过程中

会影响到测试环境其他人使用这个服务,如果想在测试环境远程debug,建议给自己要测的代码发布的时候打上一个特殊的标签,再连接这个pod进行远程debug。

相关文章:

  • 网站上不去的原因/企业网站建设公司
  • wordpress主题mip/网站优化比较好的公司
  • 网站里面的超链接怎么做/百度收录怎么弄
  • 鹰潭做网站公司/网络优化工具app手机版
  • 公司备案的网站被别的公司盗用/网站搜索排名优化软件
  • 宁城网站建设公司/宁波seo网站排名
  • Godot实现蝴蝶飞舞Shader
  • 汽车网络技术概述
  • 物理主机telenet登录ensp虚拟网络设备并显示配置python脚本
  • kubernetes Ingress
  • 基于深度学习方法的车道线检测综述(2022)
  • java List的stream()方法解析
  • Linux 命令(246)—— mii-tool 命令
  • 安卓包在真机上安装时的“风险提示”问题
  • Elasticsearch高级查询—— 关键字精确查询文档
  • APP攻防—— jadx反编译frida编写js
  • 装修--避坑--瓷砖
  • 手撕RTSP协议中 从零开始学习RTSP协议 持续更新中....