壹 简介
当我们需要对一个程序进行调试或者运行时,往往因为主机环境问题导致程序无法运行,使得不能进行进一步操作。这时候我们可以对现有搭建好的环境进行远程调试,这里我们通过IDEA对Java进行远程调试。
贰 Java远程调试
首先获取需要明确要远程调试的项目,将源码下载到本地以方便使用IDEA进行远程调试,这里写一个简单的Demo项目:
然后通过maven打包程序为jar(当然这一步操作可以选择别人打包好的jar),这里需要注意的是jar必须可以正常运行并执行,但是源码部分只需要达到可识别的样子就行(因为可能有些源码不全,但是不影响我们远程调试,只需要我们本地有项目的依赖和需要调试的源代码即可),基本上编译jar就正常编译即可:
将jar包通过以下参数运行:
# 在不同的jdk版本中运行的命令不同,同时需要注意jar运行时的web端口和远程调试的端口不一样,需要区别开
# 选择 jdk1.4,则为
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=50055
# 选择 jdk 5-8,则为
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055
# 选择 jdk9以上,则为
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:50055
# jdk9远程调试只允许本地,如果要远程,则需要在端口前配置*
这里我们使用jar 14运行,命令为:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:50055 -jar xxxx.jar
设置IDEA远程调试配置,需要注意这里配置的jdk版本和端口必须与jar运行的jdk版本和远程调试端口一致,建议配置命令也一致,预防出现不必要的问题:
运行IDEA的代码,点击小虫子,设置红色标注断点,即可进行远程调试:
通过浏览器访问,系统会在对应断点下停止运行,完成远程调试连接:
2.2 注意
在调试的时候,难免本地和远程的代码会不一致,这时候jar的实际代码运行的不会根据本地的代码的变化而变化,所以只能进来将本地代码的匹配远程代码。
不建议远程调试接口对外开放,会存在一定的安全隐患,例如:jdwp漏洞,该漏洞利用工具:jdwp-shellifier