一、远程debug的原理
Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式,并在调试器中连接到程序所在的调试地址,从而实现对程序的远程调试。
具体步骤如下:
- 在运行Spring Boot程序时,在启动命令的JVM参数中指定远程调试的相关配置,比如指定调试端口和允许远程连接等参数,例如:-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7005
- 启动Spring Boot程序后,程序会监听指定的调试端口,并等待调试器连接。
- 在调试器中创建一个远程调试配置,配置连接到程序所在的服务器和指定的调试端口。
- 连接成功后,调试器就可以通过远程连接对程序进行调试,包括设置断点、查看变量值等操作。
Tips
: 需要注意的是,为了避免远程调试带来的安全风险,建议在生产环境中禁用远程调试功能。
二、Springboot程序开启远程Debug
-
在
应用配置(Application Config)
中选择编辑配置(Edit Configuration)
-
然后选择
添加新配置(Add New Configuration)
-
在展开的列表中选择
远程 JVM 调试(Remote JVM Debug)
,点击确定
-
根据图中示例配置。
名称
可以随意起;主机
地址即远程的公网IP地址;端口
是指的远程Debug监听端口,而非该项目的服务端口;JDK
选择项目开发对应的JDK版本号;远程JVM的命令行参数
在配置完成以后拷贝下来;模块类路径
即选择主程序包路径。
-
利用Maven将项目打包
mvn clean package
,放到远程主机上,携带刚刚拷贝的启动参数启动项目,例如:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7005 -jar ******.jar
- 启动本地调试,监听远程端口
当控制台打印“已连接到目标”,说明本地项目已经开始监听远程端口,此时可以开始远程Debug了
- 在本地代码打上断点,使用postman访问远程接口
- 观察到Debug信息进入到本地,说明配置成功了。
三、注意事项
- 在生产环境中不建议开启远程debug: 开启远程debug会增加程序的额外开销,包括网络开销和调试信息的生成,还会造成接口阻塞。
- 调试信息的保护: 调试信息中可能包含敏感信息,如密码、私钥等,需要仔细过滤或禁止传递这些信息。特别是在使用公共网络时,要注意调试信息的保护和加密。
- 调试客户端和服务端的一致性: 调试客户端和服务端必须保持一致,包括调试器的版本、JDK的版本和框架的版本等。否则可能会导致不可预期的问题。
- 调试范围的限制: 开启远程debug时,要明确授权访问权,限制调试的范围,避免潜在的安全风险。
- 资源占用问题: 调试信息的生成和传输可能会占用大量的资源,包括CPU和内存等,如果不加注意可能会影响程序的正常运行
综上所述,使用远程debug需要慎重考虑,仅在必要时才应该使用,并且要严格控制权限和范围,避免潜在的安全风险。