引言
远程debug的意思是启动一个Java进程,启动一个debugger进程,将两者连接起来,利用debugger来debug Java进程。 事实上目前所有的IDE的debug功能都是通过远程debug方式来实现的,它们都利用了一个叫做JDPA(Java Platform Debugger Architecture)的技术。 利用JDPA我们除了能够在IDE开发的时候debug,也能够将IDE attach到一个生产环境上正在运行的Java进程做debug(事实上这两个场景在本质上是一样的)。
一、IDEA的本地调试
在IDEA本地上调试Java程序,通常就是以debug模式启动应用
区别于普通的运行启动,debug模式下启动应用时,可以在Console中看到一行打印:
Connected to the target VM, address: '127.0.0.1:64782', transport: 'socket'
翻译过来就是:连接到了VM(即Java程序),地址:127.0.0.1:64782,使用socket通信。
这其实就是使用了JDPA将debugger进程attach到Java程序上了。
二、IDEA的远程调试
IDEA的本地调试,其本质其实也是远程调试,也是利用网络通信方式进行的。
那么IDEA的远程调试,其实也就是模拟出IDEA是如何进行本地调试的。
1.新建一个远程调试
Run -> Edit Configurations…
点击+号,选择Remote
2.配置Debugger参数
JVM参数:
用于被远程调试的Java应用,Java应用在启动时,需要配置这些JVM参数
Debugger mode:
- attach:attach的意思是debugger连接到被debug的Java进程,是主动式的
- listen:listen的意思是debugger监听由Java进程发送过来的通信,是被动式的
Host & Port:
指定被debug的Java程序所开启的调试端口,注意不是Java的进程端口
3.配置Java程序参数
Java程序配置JVM参数,根据JDK版本选择对应的参数,如本次配置:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
4.运行Java程序
选择普通的Run
方式启动。
运行Java程序时,可以看到类似如下的打印:
Listening for transport dt_socket at address: 5005
5.运行Debugger
选择Debug
方式启动。
运行Debugger时,可以看到打印:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
此时,证明debugger成功连接到Java程序。
参考
推荐文章
创作不易,只需小手一动我就能开心收获(●゜ⅴ゜)ノ:
|点赞 ❤️|收藏 🌟|评论 💬|