这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
本文将介绍如何通过本地环境连接到远端tomcat服务器进行debug得调试,希望能给你带来帮助。
前置小准备
你需要知道的: 为了模拟远程debug整个过程尽可能贴近实际,我们采用springboot来快速构建一个web应用。随后演示如何将其导成为可执行war包,然后部署至Tomcat服务器之上。随后我们在进行远程debug调试。 基于的环境:vmware、centos7、jkd8 ,idea
导出SpringBoot项目为可执行war
大致流程:
1. 修改文件的打包 形式为war
2. 移除掉springBoot自带的Tomcat依赖
3. 添加插件信息,由于springBoot项目并没有web.xml文件信息,所以构建时需要将failOnMissingWebXml的内容置为false。如果不进行添加,打包时会提示缺少web.xml文件而导致构建失败。
4. 修改启动类信息:启动类添加继承“SpringBootServletInitializer”,并且重写“configure”方法。
5. 执行打包,即可在项目路径下找到打包好的war文件信息
操作图示:
修改为provided依赖则表明该依赖尽在在编译和测试过程中有效,最后生成的war包时不会加入。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
启动Tomcat服务
将项目导入到Tomcat安装文件下的webapps路径下,启动Tomcat服务,在地址栏键入地址信息+项目名即可完成访问
部署在虚拟机时可能遇到的问题:
为了模拟远端 Debug此时我们的Tomcat服务部署在虚拟机之下, 如果在主机下出现项目无法访问的问题,原因有可能是linuxs下防火墙的拦截所致。
此处采用最简单的方式:关闭网络防火墙
由于centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可具体命令如下:
systemctl stop firewalld.service && sudo systemctl disable firewalld.service
至此,如果在主机端可以访问到虚拟机端部署的web项目,那么说明基本准备工作基本完成,下面主要讨论如何实现远程Debug服务端代码。
远程debug程序
远程debug基本原理
主要本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。
其中被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。
调试程序的本地虚拟机:IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。
具体操作
主要操作:
1. 编辑Tomcat安装路径下的bin目录,修改其中的startup.sh文件信息
2. 修改catalina.sh中的端口信息,配置远端debug调试的端口信息
3. 启动Tomcat服务器
IDEA 中指定 Debug 服务器
-
点击主窗口菜单 Run / Edit Configurations,打开“Run/Debug Configurations”窗口;
-
点击工具栏上的“+”按钮,下拉菜单中选择“Remote”;
-
设置 Host 为远程服务器的域名或IP,保持 Port=8088此时的端口为之前所配置;
配置好信息后,对需要debug的代码打上断点,启动项目。剩下的操作步骤就是访问远程服务器对应的业务请求,程序会在运行至断点处,剩下的和本地debug别无差别,在此就不赘述了。