【日常开发】远程调试

前言

日常搬砖,日常踩坑,越来越对自己的开发技巧产生质疑,唯有慢慢积累才成。

远程调试简介

从事后端开发以来,与客户端开发很大的不同,就是要定位服务器上代码的漏洞。

1、对异常处理、日志收集要求高了。 2、服务器上分析问题的情况多了,不是用手机操作定位问题了。

  • 定位服务器上的代码漏洞,光靠看异常信息与业务日志,还是有一定限制的,我们希望看到动态信息(例如,我们想看实际运行时加载的类是哪个类?)。
  • 当然,我们也可以在服务器上使用Java调试工具,但是往往生产环境的限制条件较多(为了安全性或其他特性),不是所有的调试工具都可用。

这就需要一些方式,远程调试甚至断点调试服务器上的代码,这篇文章会介绍如何进行远程调试并结合IDEA开发工具实现断点调试。

相关须知

  1. 远程调试需要在服务器上进行一些预先配置,不是说可以直接在服务器上调试代码。
  2. 调试模式会影响性能,甚至安全性也会受影响,不能一直开启调试模式。
  3. JVM性能会受到影响,因为调试模式会屏蔽JVM本身的优化操作。
  4. 建议在内网,测试环境进行,不建议暴露在外网,会有潜在安全威胁。

开启Java远程调试模式

  • JPDA(Java Platform Debugging Architecture)提供了一系列的API,作为JDWP(Java Debug Wire Protocol)调试协议的一部分。
  • JDWP是一种应用进程与调试进程通信的协议,用于远程调试Java应用。

开启调试模式

  • 在JVM运行参数加上如下命令,可以看到使用了2个JVM选项,-Xdebug-Xrunjdwp-Xdebug开启调试功能,-Xrunjdwp配置JDWP协议,并有一些必要参数。
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
复制代码
  • JDWP协议参数

dt_socket:配置套接字通信端口。 dt_shmem:应用进程与调试进程使用共享内存进行交互,因此,调试器与应用必须在一台机器上,因此远程调试不需要此选项。

  • 其他参数

suspend:该参数用于指定是否在调试进程attach到应用进程前,挂起应用进程,默认为y。如果,想要调试应用初始化的逻辑,需要开启这个选项。

实战演练

测试环境

  • 一台服务器上面跑着Java应用,使用脚本启动。
  • IDEA 2019.01.02

操作步骤

  • 首先,看下JVM参数信息
ps -ef | grep java
复制代码

配置前参数

  • 在启动脚本,添加调试选项,并重启Java应用。

开启调试选项

IDEA远程调试配置步骤

  1. Edit Configurations...
  2. 选择Remote,填入相应的IP地址以及端口。

IDEA配置

  1. 点击debug,开始调试!!!。

结语

本文介绍了远程调试的基本概念,以及如何结合IDE来完成远程调试。Tomcat也有JDWP协议可以远程调试代码,虽然还没试过。

参考文献

猜你喜欢

转载自juejin.im/post/5d4902a36fb9a06b017e3650
今日推荐