当我们运行一个项目的时候,一般都是在本地进行debug。但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器。

环境
apache-tomcat-8.5.16

Linux

如何启用远程调试
tomcat开启远程调试
方法
切换到你的tomcat的bin目录/apache-tomcat-8.5.16/bin
下,执行:

./catalina.sh jpda start 

执行上面的命令就可以开启远程debug了,如果想配置一些信息,比如端口号什么的,请参考下面的说明。

参数说明
# JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
# command is executed. The default is "dt_socket".
#
# JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
# command is executed. The default is localhost:8000.
#
# JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
# command is executed. Specifies whether JVM should suspend
# execution immediately after startup. Default is "n".
#
# JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
# command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
# and JPDA_SUSPEND are ignored. Thus, all required jpda
# options MUST be specified. The default is:
#
# -agentlib:jdwp=transport=$JPDA_TRANSPORT,
# address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
操作说明
所以如果想修改配置,则如下操作:

在catalina.sh中进行配置:

JPDA_TRANSPORT=dt_socket
JPDA_ADDRESS=5005
JPAD_SUSPEND=n

或者通过JPDA_OPTS进行配置:

JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’

springboot开启远程调试
远程调试maven设置

The run goal forks a process for the boot application. It is possible to specify jvm arguments to that forked process. The following configuration suspend the process until a debugger has joined on port 5005

<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.1.12.RELEASE</version>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
...
</plugin>
...
</plugins>
...
</build>
...
</project>

These arguments can be specified on the command line as well, make sure to wrap that properly, that is:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

jar 命令开启远程调试
在执行jar的时候,添加上参数。如下:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar demo.jar

如果想深入了解Java调试,那么去看一下这个吧。深入Java调试体系

问题
如果出现Connection refused。

首先检查一下端口8000的使用情况:

use:~/tomcat/logs # netstat -an|grep 8000
cp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
可见当前16808端口服务被绑定了回环地址,外部无法访问。即本地调试。

办法:

修改catalina.sh中一个参数。

if [ -z "$JPDA_TRANSPORT" ]; then
JPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; then
JPDA_ADDRESS="0.0.0.0:8000"
fi
if [ -z "$JPDA_SUSPEND" ]; then
JPDA_SUSPEND="n"
fi

对JPDA_ADDRESS="localhost:8000" 把默认值(localhost:8000)改成0.0.0.0:8000。默认是本地ip调试也就是无法远程调试,0.0.0.0表示所有ip地址都能调试。

远程连上后再看端口情况:

root@VM-198-217-ubuntu:/opt/apache-tomcat-8.5.16/bin# netstat -an | grep 8000
tcp 0 0 10.133.198.217:8000 60.177.99.27:49998 ESTABLISHED

断开后是这样的:

root@VM-198-217-ubuntu:/opt/apache-tomcat-8.5.16/bin# netstat -an | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 10.133.198.217:8000 60.177.99.27:49998 TIME_WAIT

idea连接远程端口进行远程debug
我已经在服务器上开启了远程调试,idea连接的步骤,直接上图。

edit configurations

远程调试配置

参数配置

将红框内的地址和端口号改成自己的。

启动远程调试

成功界面

请求一下试试

调试的姿势和本地调试一样,开始造起来吧!

最新文章

  1. 静态方法中的this
  2. 加载cocos studio场景
  3. echarts X轴数据显示不全问题
  4. 系统巡警 v1.2 系统行为分析神器
  5. [Microsoft Test Manager]CodeUI初探
  6. Hibernate中的一级缓存、二级缓存和懒加载(转)
  7. [书目20160218]微软软件研发的奥秘:MSF精髓
  8. iOS 苹果自带地图定位Core Location
  9. Vimer的福音 新时代的Vim C++自动补全插件 clang_complete
  10. 怎么开启PHP 的错误提示?
  11. Oracle在Linux下使用异步IO(aio)配置
  12. Java对象序列化入门
  13. leetcode修炼之路——387. First Unique Character in a String
  14. xcode Simulated Metrics xib设置小问题
  15. Android短彩信源码解析-短信发送流程(二)
  16. sqlserver 无法初始化via支持库[QLVIPL.DLL]
  17. CentOS7设置SVN自启动,提交报错,无权限.手动kill掉后重启,成功.
  18. 五分钟搞定Go.js
  19. 洛谷4718【模板】Pollard-Rho算法
  20. 【小程序】&lt;image&gt;图片实现宽度100%时,高度自适应

热门文章

  1. Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
  2. Java实现蓝桥杯方格计数
  3. Java实现 LeetCode 48 旋转图像
  4. 使用Python爬取网页的相关内容(图片,文字,链接等等)
  5. 第五届蓝桥杯JavaC组省赛真题
  6. Java实现第九届蓝桥杯快速排序
  7. 从windows到Mac的那些坑
  8. 如何拿到阿里P8 Offer-候选人视角谈面试
  9. HashMap源码解析(java1.8.0)
  10. Ubuntu一键安装Mariadb