1.添加Remote:
2.服务器运行项目
2.1 jar包 java -jar 启动
ps:
服务器出现 Listening for transport dt_socket at address: 5005;
本地debug启动项目,控制台出现Connected to the target VM, address: '192.168.160.130:5005', transport: 'socket';表示可以远程dubug了。
浏览器访问http://192.168.160.130:8080/demo/
本地代码进入断点处了:
2.2 war包 Tomcat启动
使用vim catalina.sh命令,编辑catalina.sh:
ps:
默认Tomcat只允许本地调试,把默认的 localhost:8000 改成 0.0.0.0:5005,就代表任何ip都可以远程debug了。
[root@localhost bin]# vim catalina.sh
[root@localhost bin]# ./catalina.sh jpda start
Using CATALINA_BASE: /usr/local/apache-tomcat-8.5.53
Using CATALINA_HOME: /usr/local/apache-tomcat-8.5.53
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.5.53/temp
Using JRE_HOME: /usr/local/jdk1.8.0_11
Using CLASSPATH: /usr/local/apache-tomcat-8.5.53/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.53/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]#
查看Tomcat的日志文件catalina.out:
21-Mar-2020 20:39:11.467 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
21-Mar-2020 20:39:11.484 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 6862 ms
2020-03-21 20:39:20.214 INFO 70337 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-03-21 20:39:20.219 INFO 70337 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
Listening for transport dt_socket at address: 5005
可以看出Listening for transport dt_socket at address: 5005。
3.远程debug,勿滥用
开发人员经常会使用到本地debug功能,有时候有场景需要远程debug日常环境的机器,在这种情况下可能会有多个人同时在使用这台机器,经常出现的现象是某一个人在远程debug这台机器,导致其他人一直在等待。而其他人也是一脸懵逼,不知道这台机器到底发生了什么…
如图,四个标签页均是访问http://192.168.160.130:8080/demo/。四个页面一直转,一直等待。。。
如何最小化的避免自己远程debug时对其他人造成的影响。这对debug操作者有一些要求。
假如代码如下:
@GetMapping(value = "/{id}")
public String test1(@PathVariable Integer id) {
return "hello world======>"+id;
}
设置如下:
再次访问浏览器,这次打开四个页面,分别访问:http://192.168.160.130:8080/demo/1,http://192.168.160.130:8080/demo/2,http://192.168.160.130:8080/demo/3,http://192.168.160.130:8080/demo/4.结果只有http://192.168.160.130:8080/demo/2这个页面在刷新,也就是只有id==2的才进入了断点,减少了对其他线程的阻塞。