转载

【日常开发】远程调试

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

远程调试简介

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

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。如果,想要调试应用初始化的逻辑,需要开启这个选项。

原文  https://juejin.im/post/5d4902a36fb9a06b017e3650
正文到此结束
Loading...