0
点赞
收藏
分享

微信扫一扫

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


简介:

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

发生现场

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

【前提】:

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

【IDEA创建配置】

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

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

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

配置完成后点击断点调试

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


运行后左下角肯定会报,拒绝连接

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

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

1.Docker中Tomcat运行War

【添加新端口】

远程服务器中Java在Docker容器中运行War包时

注意:

在创建tomcat容器时我们一般只会把使用的端口进行映射,而远程断点使用的是Socket连接程序这就意味着我们需要吧原有的容器添加一个新端口应用远程连接因为要写这篇我特意写了篇​​已有容器怎么添加新端口​​点击查看

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


我这边已经配置好我Dokcer中的容器添加新端口用于远程连接,容器​​内部端口为8081​​​,​​宿主机(Linux对外访问的端口)端口为8082​

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

【修改容器启动配置】

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

docker exec -it 容器id bash

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


然后使用vim 编辑 ​​bin/catalina.sh​​的配置文件

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


这里提示容器内部没有vim命令我们这在容器安装下

​apt-get update​

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

​apt-get install vim​

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


然后输入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"

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


保存好后,退出容器内部

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


重启容器:​​docker restart 容器id​

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


回到Idea修改端口信息

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


debug运行后,出现以下输出表示断点远程连接服务器完成

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

【测试断点进入】

使用请求工具发送模拟请求:

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


当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处

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


到这里Docker中Tomcat运行War的远程断点就完成了!

2.运行Jar包调试

【编写测试接口】

在项目中添加远程断点接口用于测试,​​/weChat/debug​

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


我们先本地进行调用保证后续请求不出问题!

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


只需要在后端添加一行配置就行

​produces ="text/html;charset=UTF-8"​

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


响应正常了

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

【jar包上传服务器】

现在我们把项目部署到服务器中,并且打包方式为jar包部署

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


在​​start.sh​​脚本中添加启动命令

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

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


运行jar包

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


​ps -aux | grep 包名称​​查看进程

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


记得服务器使用到的端口要在对应服务商(阿里云,腾讯云)平台找到对应服务器实例开启防火墙设置端口信息到安全组里面

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


在测试请求接口

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


完成服务端的项目启动现在还不能远程debug需要在启动脚本添加参数

【启动脚本添加配置】

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

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

我怎么把Socket连接端口设置成​​8086​​,该端口也要在防火墙里面设置才能访问

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


启动脚本修改为

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

配置信息​​必须在-jar前面​

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


把之前的进程​​kill​​ 掉

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


然后再运行​​./start.sh​

【IDEA设置断点连接】

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


IDEA运行Debug模式

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

【测试断点进入】

使用请求工具发送模拟请求:

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

当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处

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


完成远程调试

3.Tomcat运行War包调试

其中我觉得这个都可以不用写下去,因为配置这个和前面写的Docker中Tomcat运行War调试的教程大差不差

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


由于没有安装Tomcat所以想偷懒不想再Linux中再安装(-_-)

我就当你们已经有在自己服务器中安装Tomcat的配置并且,还知道怎么修改tomcat的运行端口号,接着我就快速安装下tomcat完成后面的演示!

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

【SpringBoot 打成War必看】

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

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

【War包上传服务器】

进入 ​​webapps​​目录下

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


使用工具把War上传到该目录下

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

【修改启动配置】

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

然后​​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"

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


保存完成后在运行tomcat

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


记得配置防火墙8088的端口,不然访问不了

【IDEA设置断点连接】

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


配置好后运行

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

【测试断点进入】

使用请求工具发送模拟请求:

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

当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处

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


Tomcat运行控制台打印信息

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

完成远程调试


举报

相关推荐

0 条评论