项目实现远程Debug调试
Posted 攻城狮Chova
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目实现远程Debug调试相关的知识,希望对你有一定的参考价值。
基本概念
- 由于部署环境的不同,经常会出现开发环境测试正常.但是在测试环境,甚至生产环境会出现异常的问题
- 生产环境中处理异常问题的方式比较单一,通常是通过生产环境中的项目运行日志获取运行中环境上下文,分析日志并尝试重现Bug. 但是这回引起以下的问题:
- 日志分析工作非常耗时
- 日志记录有时不一定能反映出问题,可能需要多次重复分析日志,猜测问题,添加日志,部署项目,获取日志这样的过程来逼近问题
- 为了解决上述问题,需要进行远程Debug调试:
- 将程序在测试环境中使用Debug模式启动
- 在本地环境中使用IDEA在工程中设置断点进行项目调试
远程调试
配置jvmArguments参数
- 在Maven项目的pom.xml文件中配置jvmArguments参数 : -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n
<build>
<plugins>
<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>
</plugins>
</build>
- 添加jvmArguments参数配置后的Maven项目部署后就可以支持远程Debug调试了
- jvmArguments中的参数说明:
- -Xdebug: 通知JVM在Debug模式下工作
- -Xrunjdwp: 通知JVM使用Java debug wire protocol运行调试环境,这个参数中包含以下的Debug调试选项
- transport: 指定调试数据的传输方式
- dt_socket: 使用Socket模式传输数据
- dt_shmem: 使用共享内存方式传输数据.这个方式只适用于Windows平台
- address: 进行调试的服务器的端口号,也就是客户端用来连接服务器的端口号
- server: JVM是否作为调试调试服务器执行.值为y或者n
- suspend: 是否在调试客户端建立连接之后启动JVM.值为y或n
- transport: 指定调试数据的传输方式
打包调试项目
- 使用IDEA工具对需要调试的项目进行打包,获取到项目的jar包
启动参数部署项目
- 使用支持远程调试Debug的启动参数对项目进行部署
java -agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n -jar com.oxford-v1.0.jar
- 启动成功后,就会监听5005端口
配置IDEA的远程Debug
- 在启动项中,选择Edit Configuration进行配置的编辑
- 选择 + 号Add New Configuration, 选择Remote, 然后添加远程Debug配置
- 在Remote的配置中,添加远程Debug配置,包括Host和Port. 配置完成后,点击Apply和OK按钮
使用远程Debug调试
- 在启动项中选择远程启动项Remote启动,通过Debug启动项目
- 在项目中添加断点即可进行项目的远程调试
以上是关于项目实现远程Debug调试的主要内容,如果未能解决你的问题,请参考以下文章