LOADING

正在加载

Java远程调试

壹 简介

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

贰 Java远程调试

首先获取需要明确要远程调试的项目,将源码下载到本地以方便使用IDEA进行远程调试,这里写一个简单的Demo项目:
c92e188e700c78a8a897aad25e9c60e2.png
然后通过maven打包程序为jar(当然这一步操作可以选择别人打包好的jar),这里需要注意的是jar必须可以正常运行并执行,但是源码部分只需要达到可识别的样子就行(因为可能有些源码不全,但是不影响我们远程调试,只需要我们本地有项目的依赖和需要调试的源代码即可),基本上编译jar就正常编译即可:
b938a0ef28a141888bc184544464f3ec.png
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
a902737851b36c478ee6ff9a232239db.png
设置IDEA远程调试配置,需要注意这里配置的jdk版本和端口必须与jar运行的jdk版本和远程调试端口一致,建议配置命令也一致,预防出现不必要的问题:
c422c8d5e99c21d4842ed5157e7a70bc.png
运行IDEA的代码,点击小虫子,设置红色标注断点,即可进行远程调试:
1dde6a6a367852dad175645f954124b2.png
通过浏览器访问,系统会在对应断点下停止运行,完成远程调试连接:
597f482d25d73048c368040b36b07e12.png

2.2 注意

在调试的时候,难免本地和远程的代码会不一致,这时候jar的实际代码运行的不会根据本地的代码的变化而变化,所以只能进来将本地代码的匹配远程代码。

不建议远程调试接口对外开放,会存在一定的安全隐患,例如:jdwp漏洞,该漏洞利用工具:jdwp-shellifier

叁 参考

avatar
小C&天天

修学储能 先博后渊


今日诗句