1.场景
1.1 测试远程代码,加密等无法本地测试的内容时;
1.2 本地因为缺少依赖等无法,无法实现代码启动时;
2.配置
2.1 配置idea的remote配置;步骤
2.2 增加启动参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
或者:
-Xdebug -Xrunjdwp:transport=dt_socket,address=8012,server=y,suspend=n
各参数解释:
-agentlib:<libname>[=<选项>]
加载指定的本机代理程序库。libname 后面 可以使用逗号分隔的特定于该库的选项列表。
JDWP
是 Java Debug Wire Protocol 的缩写,在JPDA(Java Platform Debugger Architecture)中,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。
与PHP的 Xdebug 类似,当其调试端口直接开放在公网上时,很容易被攻击者攻击并且获取系统权限。
-Xdebug是通知JVM工作在DEBUG模式下
-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:
transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。
server参数是指是否支持在server模式的VM中.
onthrow指明,当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。
launch指明,当JVM被中断下来时,执行的可执行程序。该参数可选
suspend指明,是否在调试客户端建立起来后,再执行JVM。
onuncaught(=y或n)指明出现uncaught exception 后,是否中断JVM的执行.
调试模式,默认为Attach ;
Attach :此种模式下,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;
Socket :此种模式下,是我们(调试客户端)去监听一个端口,当调试服务端准备好了,就会进行连接。