前言:
前天在对系统升级的时候,有客户反馈系统出问题了,登录不上了,这可不是一件小事,虽然用户量不大但肯定影响客户办公。当时第一个想法就是肯定是服务挂了,三下五除二就把服务重启了一遍,可用了一段时间后系统又出现了这种问题,为了不影响系统正常运行果断将系统回退到上一个版本。本想着在本地测试一下,可是始终不能复现bug一切正常,呃......。好家伙那就在生产环境下打印日志吧。乖乖嘞!跟踪半天日志信息还是不能分析到具体出现问题的原因。跟之前带我的师傅打电话,把问题出现的情况给他简述了一下,他推荐我远程DEBUG。那么问题来了远程debug是个啥?之前做项目的时候也没这样干过,也不清楚完全不会呀。百度吧,百度能够填补我的无知。经过几篇文章的洗礼我貌似懂了哈哈哈,赶紧着手实践...
着手实践:
1、package项目前先检查一下我们的项目是否支持远程debug
在项目的pom.xml文件里的plugin添加<jvmArguments>的参数配置信息
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments>
</configuration>
</plugin>
添加该参数后才支持软件包在服务器上进行debug。
参数的具体信息如下:
-Xdebug 是通知JVM 工作在 DEBUG模式下;-Xrunjdwp 通知 JVM 使用 (Java debug wire protocol) 运行调试环境。该参数同时包含了一系列的调试选项;transport 指定了调试数据的传送方式, dt_socket 是指用 SOCKET 模式,另有 dt_shmem 指用共享内存方式,其中,dt_shmem 只适用于 Windows 平台;address 调试服务器的端口号,客户端用来连接服务器的端口号;server=y/n VM 是否需要作为调试服务器执行;suspend=y/n 是否在调试客户端建立连接之后启动 VM ;
2、其次打包项目(这里打包的项目打的是jar包)
一般情况下直接选择package前边的clean等步骤会依次执行,但为了保险起见我们还是要先进行clean一下,然后再build构建一下再进行package打包(防止一些缓存没有清掉导致的项目启动后异常)。生成的jar包是在target目录下的哦,把它复制出来放到你要放的地方(懂得都懂,不懂的就问)。
3、在本机上进行调试jar包
一般我们执行jar包命令都是 java -jar xxx.jar
这里不一样这里的执行命令是:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar xxx.jar
中间红色部分参数与pom.xml文件里的jvmArguments的参数是一致的。
jar包启动后你会看到这样一个提示:
4、将项目部署到远程服务器上复现bug。
5、本地idea远程debug服务器上的jar包(注意:服务器上的jar包要与本地项目代码保持一致)
要远程调试就要配置远程调试启动项
1》选择配置
2》 在添加里选择Remote JVM Debug
3》配置远程服务器的地址和端口号
4》启动RemoteDebug,打上断点,前端发送一个请求,就可以进行debug了
6、 对于eclipse远程debug(本人电脑暂未安装,就用语言简单描述一下)
同样要求对项目中的代码必须和jar包保持一致,eclipse步骤如下
1》右击项目——>Debug As——>DebugConfigurations
2》找到Remote Java Application 右击 new
3》配置"host"和”port“
4》运行
7、如果是调试war包的话我们需要修改tomcat的startup.bat文件
1》需要先将项目部署到tomcat目录下的webapp目录下
2》修改Tomcat/bin/startup.bat文件
# vim startup.bat
#编辑配置文件信息,在最前面加上如下代码:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
其他步骤如上即可。