• IDEA远程连接服务器Java程序进行断点调试(对Docker中Tomcat容器,jar,Tomcat的远程调试看这篇就够了)


    简介:

    对于本地项目测试没问题,发布线上各种奇奇怪怪的问题接踵而来,对此开发同学心里有何感想,跟老板battle还是默默查原因,苦逼的你只能加班解决问题,也不知道是请求方导致的问题还是程序自身的原因,接下来就对Idea调试怎么调试线上程序展开讲解。

    发生现场

    好巧不巧我就就遇到,本地没问题线上运行了好久也没问题,突然那天线上的程序就出现订单进入系统不创建的问题,我这简单说下创建流程,由上游提供数据,我们的程序会吧订单数据保存到临时表中我们会把大部分数据保存在临时表中,订单真实表则保存系统生成的订单号和订单初始状态,然后通过定时器对临时表里面的数据进行组装完成后在,保存到订单真实表中!,所以上游说订单推送了为什么我们的系统没有订单号信息,就是因为定时器中的代码好像没被运行,这个就很奇怪,但是看代码结构是有对redis中的键判断查询不到才会运行后续流程,排查了redis没有问题于是就对代码可能影响方法运行的地方都打了日志后续也没有出现问题。但是虽然现在可能不会出现问题,那不意味着以后用不上这个远程调试,说了这么多也该进入正题了!!!

    【前提】:

    1.远程调试的Java项目要和本地的代码一样!
    2.如果是War需要对服务器tomcat的启动配置进行修改
    3.如果是在Docker中使用Tomcat运行War需要对容器添加一个新端口

    【IDEA创建配置】

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    配置完成后点击断点调试

    在这里插入图片描述
    运行后左下角肯定会报,拒绝连接
    在这里插入图片描述

    【按照情况使用对应方式】

    1.Docker中Tomcat运行War

    【添加新端口】

    远程服务器中Java在Docker容器中运行War包时
    注意:
    在创建tomcat容器时我们一般只会把使用的端口进行映射,而远程断点使用的是Socket连接程序这就意味着我们需要吧原有的容器添加一个新端口应用远程连接因为要写这篇我特意写了篇已有容器怎么添加新端口点击查看
    在这里插入图片描述
    我这边已经配置好我Dokcer中的容器添加新端口用于远程连接,容器内部端口为8081宿主机(Linux对外访问的端口)端口为8082
    在这里插入图片描述

    【修改容器启动配置】

    进入容器修改Tomcat的启动配置信息

    docker exec -it 容器id bash
    
    • 1

    在这里插入图片描述
    然后使用vim 编辑 bin/catalina.sh的配置文件
    在这里插入图片描述
    这里提示容器内部没有vim命令我们这在容器安装下

    apt-get update

    在这里插入图片描述

    apt-get install vim
    在这里插入图片描述
    然后输入y回车
    然后安装完成后在vim bin/catalina.sh进入编辑
    然后再第一行添加以下代码

    address=8081表示启动会创建8081端口运行端口号要改成容器新添加的端口

    CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081"
    
    • 1

    在这里插入图片描述
    保存好后,退出容器内部
    在这里插入图片描述
    重启容器:docker restart 容器id
    在这里插入图片描述
    回到Idea修改端口信息
    在这里插入图片描述
    debug运行后,出现以下输出表示断点远程连接服务器完成
    在这里插入图片描述

    【测试断点进入】

    使用请求工具发送模拟请求:
    在这里插入图片描述
    当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处
    在这里插入图片描述
    到这里Docker中Tomcat运行War的远程断点就完成了!

    2.运行Jar包调试

    【编写测试接口】

    在项目中添加远程断点接口用于测试,/weChat/debug
    在这里插入图片描述
    我们先本地进行调用保证后续请求不出问题!
    在这里插入图片描述
    只需要在后端添加一行配置就行
    produces ="text/html;charset=UTF-8"
    在这里插入图片描述
    响应正常了
    在这里插入图片描述

    【jar包上传服务器】

    现在我们把项目部署到服务器中,并且打包方式为jar包部署
    在这里插入图片描述
    start.sh脚本中添加启动命令

    nohup java  -jar itmei.jar > /dev/null 2>&1 &
    
    • 1

    在这里插入图片描述
    运行jar包
    在这里插入图片描述
    ps -aux | grep 包名称查看进程
    在这里插入图片描述
    记得服务器使用到的端口要在对应服务商(阿里云,腾讯云)平台找到对应服务器实例开启防火墙设置端口信息到安全组里面
    在这里插入图片描述
    在测试请求接口
    在这里插入图片描述
    完成服务端的项目启动现在还不能远程debug需要在启动脚本添加参数

    【启动脚本添加配置】

    ${debug_port}设置成我们需要添加端口用于Socket连接使用的端口

    -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}
    
    • 1

    我怎么把Socket连接端口设置成8086,该端口也要在防火墙里面设置才能访问
    在这里插入图片描述
    启动脚本修改为

    nohup java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=8086 -jar itmei.jar > /dev/null 2>&1 &
    
    • 1

    配置信息必须在-jar前面

    在这里插入图片描述
    把之前的进程kill
    在这里插入图片描述
    然后再运行./start.sh

    【IDEA设置断点连接】

    在这里插入图片描述
    IDEA运行Debug模式在这里插入图片描述

    【测试断点进入】

    使用请求工具发送模拟请求:
    在这里插入图片描述

    当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处
    在这里插入图片描述
    完成远程调试

    3.Tomcat运行War包调试

    其中我觉得这个都可以不用写下去,因为配置这个和前面写的Docker中Tomcat运行War调试的教程大差不差
    在这里插入图片描述
    由于没有安装Tomcat所以想偷懒不想再Linux中再安装(-_-)
    我就当你们已经有在自己服务器中安装Tomcat的配置并且,还知道怎么修改tomcat的运行端口号,接着我就快速安装下tomcat完成后面的演示!


    想了想,之前小白时候的自己看文章,作者也是一笔带过一些知识点,导致后面不知道写些什么,所以又写了一篇关于Linux安装Tomcat并且修改指定端口号的文章用于配备当前不太懂的小伙伴,给我点个赞吧,老铁(✪ω✪)!
    文章地址

    【SpringBoot 打成War必看】

    SpringBoot 打成War如果是单纯在pom.xml打包方式改成war
    在这里插入图片描述

    运行后也访问不了需要对启动类进行改造点击查看

    【War包上传服务器】

    进入 webapps目录下
    在这里插入图片描述
    使用工具把War上传到该目录下
    在这里插入图片描述

    【修改启动配置】

    在这里插入图片描述

    然后vim catalina.sh进入编辑
    然后再第一行添加以下代码

    address=8088表示启动会创建8088端口用于IDEA的Socket连接调试

    CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8088"
    
    • 1

    在这里插入图片描述
    保存完成后在运行tomcat
    在这里插入图片描述
    记得配置防火墙8088的端口,不然访问不了

    【IDEA设置断点连接】

    在这里插入图片描述
    配置好后运行
    在这里插入图片描述

    【测试断点进入】

    使用请求工具发送模拟请求:
    在这里插入图片描述

    当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处
    在这里插入图片描述
    Tomcat运行控制台打印信息
    在这里插入图片描述

    完成远程调试

  • 相关阅读:
    Linux安装MINIO
    MACOS arco design 初学者踩坑指南
    C语言之网络编程(必背知识点)
    04.webpack中css的压缩和抽离
    Cocoa Touch 框架及其步骤
    工作好多年,回忆人生--高中三年
    IPV6地址详解
    Vue中自定义指令用法
    s3存储容器与awscli的交互
    3年测试经验,去面试连25K都拿不到了吗?现在测试这么坑?
  • 原文地址:https://blog.csdn.net/qq_45502336/article/details/126195279