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

导读:本篇文章讲解 IDEA远程连接服务器Java程序进行断点调试(对Docker中Tomcat容器,jar,Tomcat的远程调试看这篇就够了),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

简介:

对于本地项目测试没问题,发布线上各种奇奇怪怪的问题接踵而来,对此开发同学心里有何感想,跟老板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

在这里插入图片描述
然后使用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"

在这里插入图片描述
保存好后,退出容器内部
在这里插入图片描述
重启容器: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 &

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

【启动脚本添加配置】

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

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

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

nohup java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=8086 -jar itmei.jar > /dev/null 2>&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"

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

【IDEA设置断点连接】

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

【测试断点进入】

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

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

完成远程调试

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83823.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!