专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

【日常开发】远程调试

前言

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

远程调试简介

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

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

70_1.png

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

70_2.png

IDEA远程调试配置步骤

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

70_3.png

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

结语

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

参考文献

文章永久链接:https://tech.souyunku.com/40503

未经允许不得转载:搜云库技术团队 » 【日常开发】远程调试

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们