调试模式的参数
启动中需要加入特定参数才能使用debug模式,并且需要开放调试端口
JDK5-8
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
JDK9+
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005
suspend=n
表示的是启动Java应用时是否立即进入调试模式,suspend=y
表示启动即暂停,suspend=n
则表示启动时不需要暂停。address=*:5005
表示的是Debug
监听的服务地址和端口,根据需求修改,上述配置会监听到0.0.0.0
。
参数说明
(1) transport
指定运行的被调试应用和调试者之间的通信协议,它由几个可选值:
dt_socket:主要的方式,采用 socket 方式连接
dt_shmem:采用共享内存方式连接,仅支持 Windows 平台(暂未验证)
(2) server
当前应用作为调试服务端还是客户端,默认为 n。
如果想将当前应用作为被调试应用,设置该值为 y;如果想将当前应用作为客户端,作为调试的发起者,设置该值为 n。
(3) suspend
当前应用启动后,是否阻塞应用直到被连接,默认值为 y。
在大部分的应用场景,这个值为 n,即不需要应用阻塞等待连接。一个可能为 y 的应用场景是,程序在启动时出现了一个故障,为了调试,必须等到调试方连接上来后程序再启动。
(4) address
(5) onthrow
(6) onuncaught
(7) launch
(8) timeout
该参数限定为 java -agentlib:jdwp=…
可用,单位为毫秒ms。
当 suspend = y
时,该值表示等待连接的超时;当 suspend = n
时,该值表示连接后的使用超时。
IDEA配置远程调试
编译后的class文件夹调试
只需要将编译后的class字节码文件打包成一个jar包或者是war包,然后执行如上操作就好了。
cd src
jar -cvf test.jar *
总结
总的来说调试还是比较重要,其实不仅仅是jar包的调试,比如还有Spring Boot(Spring Boot以jar包启动调试与上面类似)、Tomcat、weblogic这些。假设条件允许情况下,做一些审计时候,比如war包,也可以采用远程调试的方式进行审计。会更简单快捷定位一些。