壹 简介
当我们需要对一个程序进行调试或者运行时,往往因为主机环境问题导致程序无法运行,使得不能进行进一步操作。这时候我们可以对现有搭建好的环境进行远程调试,这里我们通过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