作者 | nice_0e3
来源 | urlify.cn/QJreAr
调试程序
首先还是创建一个工程,将jar包导入进来
调试模式的参数启动中需要加入特定参数才能使用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 的应用场景是,你的程序在启动时出现了一个故障,为了调试,必须等到调试方连接上来后程序再启动。
(3) address
暴露的调试连接端口,默认值为 8000。
(4) onthrow
当程序抛出设定异常时,中断调试。
(5) onuncaught
当程序抛出未捕获异常时,是否中断调试,默认值为 n。
(6) launch
当调试中断时,执行的程序。
(7) timeout
该参数限定为 java -agentlib:jdwp=… 可用,单位为毫秒ms。
当 suspend = y 时,该值表示等待连接的超时;当 suspend = n 时,该值表示连接后的使用超时。
IDEA配置远程调试
下断点后能直接停下来。
class文件夹调试其实也比较简单,只需要将他打包成一个jar包或者是war包,然后执行如上操作就好了。
cd srcjar -cvf test.jar *
总的来说调试还是比较重要,其实不仅仅是jar包的调试,比如还有Spring Boot(Spring Boot以jar包启动调试与上面类似)、Tomcat、weblogic这些。假设条件允许情况下,做一些审计时候,比如war包,也可以采用远程调试的方式进行审计。会更简单快捷定位一些
END
2021年Java原创面试题库连载中
【000期】Java最全面试题库思维导图
【020期】JavaSE系列面试题汇总(共18篇)
【028期】JavaWeb系列面试题汇总(共10篇)
【042期】JavaEE系列面试题汇总(共13篇)
【049期】数据库系列面试题汇总(共6篇)
【053期】中间件系列面试题汇总(共3篇)
【065期】数据结构与算法面试题汇总(共11篇)
【076期】分布式面试题汇总(共10篇)
【100期】综合面试题系列汇总(共23篇)
【151期】100-150期汇总(共50篇)
【201期】150-200期汇总(共50篇)
【251期】200~250期汇总(共50篇)
,