记录一种调试方式,当服务部署完成后出现接口调用与预期结果不符时该如何远程调试。JDK已经想到了这一点并提供了JDWP协议供开发人员进行远程调试。提供了一系类指令可以在命令行使用,但是指令过于复杂,只介绍关于IDEA开发工具提供了与本地调试一样的方式调试远程服务。其原理也是基于JDWP协议。
服务端(被调试端)
java -jar agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=55555 test-field.jar
transport 传输方式
- dt_sokcet 端口链接
- dt_shmem 共享内存(只限win且两端都在一台机器上)
server
- y 表示服务端(被调试端)
- n 表示客户端(调试端)
suspend
- y 表示服务启动后就需要等待调试端链接,不连接不运行
- n 服务启动后正常运行,用户正常使用,当调试端连接后才会断点分析
address 指定端口
调试端
有几个注意事项,我这里用到了中文插件,所以可以显示不太一样。使用工具调试必须要求调试端的代码和服务端的代码一致,且代码块位置没有改动。使用的话就比较简单正常启动即可。出现已连接到目标VM.......即表示链接成功。之后访问远程服务的接口如果有断点就会停止等待。
远程调试比较适合用于测试,本地环境没问题但是到开发环境就出现问题的情形。切记在调试端开启调试后,如果有被调试端的接口被访问并该接口含有断点则请求就会暂停。