远程Debug调试


​基本概念​​​​远程调试​
​配置jvmArguments参数​​​​打包调试项目​​​​启动参数部署项目​​​​配置IDEA的远程Debug​​​​使用远程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



打包调试项目

  • 使用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配置,包括HostPort. 配置完成后,点击ApplyOK按钮

使用远程Debug调试


  • 在启动项中选择远程启动项Remote启动,通过Debug启动项目
  • 在项目中添加断点即可进行项目的远程调试