IDEA 开启远程调试

2年前 (2022) 程序员胖胖胖虎阿
192 0 0

idea 远程调试

背景

在编写代码时, 总会遇到这样或者那样的bug. 这有些bug 特别是业务逻辑的bug .
在生产或测试环境好复现而在开发环境不好复现. 现在提供的一种思路, 就是远程调试:
我们可以在本地直接调试生产环境或者测试环境的代码. 只需我们本地代码和远程部署的代码一致.
远程主机就会通过socket 将程序执行情况同步到本地

操作

下面以idea 为例

  1. 设置远程启动配置
    在我们平时启动项目的坐边, 有一个 edit configuration的选项, 然后点击 + , 选择 Remote JVM Debug 选项
    Name 为之后启动的名称,
    Host 是远程服务器的 ip,
    port: 用于远程socket 连接的端口, 注意不要和项目端口一致, 否则可能会导致项目启动失败
    然后idea 会为我们自动生成一条命令行参数:
    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10010
    IDEA 开启远程调试

  2. 远程项目启动参数
    如果是使用的 java -jar xxx.jar 启动, 只需要在原来的启动方式加入第1步生成的参数即可. 例如

    ## 注意socket端口(address) 需要根据第一步自己设置的端口来配置
     java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10010  -jar xxx.jar
    
  3. 重新启动项目
    本地代码要和远程的代码保持一致, 否则有可能会导致调试失败
    在远程项目启动成功后, 在本地运行第一步的远程配置
    IDEA 开启远程调试

注意事项

  1. 如果服务器配置了 iptables/防火墙 , 需要放开对应的端口
  2. 如果使用的是云服务器, 则也需要放开对应socket端口的安全组
  3. 如果使用开发工具的是eclipse , 远程调试见这位大佬的博客 传送门
  4. 如果使用docker 部署的jar, 则需要进行如下配置

docker 项目进行远程调试

本质和上面步骤差不多, 但是需要在docker 中, 添加一个内部端口和外部端口的映射
以便我们本地能够通过这个映射访问docker 项目部署的容器

步骤:

  1. 修改 DockerFile 文件
    在DockerFile 中的项目启动参数的位置添加idea 生成的参数
    (也可以复制下面参数, 只需修改为自己设置的socket 连接端口)
    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10010

    部分DockerFile文件展示

    FROM java:8
    
    COPY xxx.jar xxx.jar
    
    EXPOSE 8081
    
    ENTRYPOINT ["java","-Duser.timezone=GMT+8","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10010","-jar","/xxx.jar"]
    
  2. 配置Docker 镜像启动参数
    利用 -p hostPort:containerPort 参数将 docker 容器内部 10010 端口映射到项目部署服务器的 10010 端口;
    xxx 为项目名

    docker run -d --restart=always --name xxx -p 8081:8081 -p 10010:10010 \
    -v /home:/home \
    -v /home/szhyyt-logs/xxx/:/logs \
    -v /home/xxx/upload:/upload \
     xxx:0.0.1  --spring.profiles.active=prod
    
    
  3. 启动docker 镜像, 本地运行 Remote Jvm Debug 配置


关于远程调试原理和配置参数解释. 如果还想了解更多请见 这里

版权声明:程序员胖胖胖虎阿 发表于 2022年10月12日 上午6:48。
转载请注明:IDEA 开启远程调试 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...