因为本地和远程环境不一致,所以我们调试的结果和远程不太一样,很多时候我们都是通过打日志的方式查看结果,这个时候远程调试就显得非常有用了。

1、远程运行jar包

首先,我们要在远程运行jar包。建议通过sh方式运行。

  1. java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081 -jar demo.jar

成功运行的结果:

  1. Listening for transport dt_socket at address: 8001
  2. . ____ _ __ _ _
  3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
  4. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  5. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  6. ' |____| .__|_| |_|_| |_\__, | / / / /
  7. =========|_|==============|___/=/_/_/_/
  8. :: Spring Boot :: (v2.0.1.RELEASE)
  9. 2019-08-06 17:33:43.999 INFO 30027 --- [ main] com.alvin.DemoApplication : Starting DemoApplication v1.0-SNAPSHOT on iZ2ze1m0zmp2di7u8cb4kcZ with PID 30027 (/home/alvin/Demo-1.0-SNAPSHOT.jar started by alvin in /home/alvin)

2、本地运行代码

本地新建remote,修改host和port,和远程保持一致,因为原理是通过soket链接的。

image.png

运行remote

image.png

成功的话会显示:

image.png

3、浏览器访问,查看断点

访问:http://39.106.43.67:8002/demo

注意这里的端口是web服务的端口,刚才提到的端口是socket端口。

然后成功进入断点,通过返回的系统版本判断成功。

image.png