如果你遇到了上述问题却无从下手,那么你一定要了解一下远程调试,而不是原地踏步用老旧的方法解决变幻莫测的问题
在很长的一段时间内,我自己一直以为 调试 (Debug)就是IDE的功能,而且只能调试本地的程序,对于远程环境则无能为力。在一次浏览Github优秀的中文开源项目中了解到Java Agent,该项目甚至在Issue里教开发者如何用远程调试,这才知道原来JVM还提供了一套如此优秀的工具,真是相见恨晚啊!!!
Java Agent为开发者提供了一种运行时修改字节码的能力,例如JVM级别的AOP,不重启应用直接修改字节码等,利用该技术可以玩出很多应用代码无法实现的花样。
JDPA全称Java Platform Debugger Architecture(Java平台调试架构),定义了Java平台上的调试体系架构,主要包括3个主要组成部分:JVMTI(Java虚拟机工具接口),JDI(Java调试连线协议)和JDWP(Java调试接口)
JDWP全称Java Debug Wire Protocol,定义了调试器和远程JVM之间的调试通讯协议
JDPA的体系很复杂,我们作为开发者先学会如何用就可以了。用法也很简单,启动应用的参数加上以下参数就好了
-agentlib:jdwp=transport=dt_socket,address=6666,server=y,suspend=n
然后IDE里面选择Remote Java Application,填入对应的IP和端口,就能愉快地远程调试了