用Intellij IDEA断点调试远程服务器部署的tomcat项目
回顾
在很早之前我已经写过一篇关于 在intellij idea下远程调试项目 的文章,时隔几年,又遇到同样的情况, 再参考自己写的东西已经不适用了,我总结了一下,可能是以下几个问题
- 之前没有写清楚
- 时隔久远,已经更新了,不再适用当前
- 没有完全理解,草率就记了,知其然不知其所以然
- ……
发现疑点一:相同的目录下
写上一篇文章的时候环境都是windows,所以可以把代码放在相同的目录下,但是这次环境不一样了一个是windows一个是linux, 怎么放到相同的目录下呢?
发现疑点二:配置remote tomcat
由于第一步已经发生了变化,导致第二步不知道该怎么配置了
为了搞清楚这两个疑点,我开始在网上重新查找了相关文章,看了几篇,在其中简书的一篇IDEA远程调试Tomcat文章解决了我的两个疑点
拨开云雾见青天
- 原来并不需要相同的目录,服务器代码位置和本地代码位置没有关系
- 应该是配置Remote而不是Tomcat Server Remote
但不知为什么在上篇文章中我使用Tomcat Server Remote的方式也达到效果,对这个功能的理解应该有误差,后面再说吧。
如何使用intellij idea如何远程调试?
搞清楚我的疑点,那我就可以进入正题了,如何使用intellij idea如何远程调试?一共分为2步
在intellij idea里添加remote配置
这一步是配置你要调试的目标,服务器的地址和调试端口
选择 【Select Run/Debug configuration】,【Edit Configurations…】点击左上角绿色加号,选择Remote, 这里需要填写的就是host和port,然后在【Search sources using module‘s classpath】选择自己的项目
复制remote JVM参数,后面需要用到
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
编辑远程服务器tomcat catalina.sh 文件
第二步需要打开tomcat远程调试的功能,找到tomcat目录下的bin目录的catalina.sh文件
ubuntu@VM-179-90:/home/apache-tomcat-8.5.23/bin$ pwd
/home/apache-tomcat-8.5.23/bin
ubuntu@VM-179-90:/home/apache-tomcat-8.5.23/bin$ ls
bootstrap.jar catalina-tasks.xml configtest.bat digest.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat
catalina.bat commons-daemon.jar configtest.sh digest.sh shutdown.bat startup.sh tool-wrapper.bat version.sh
catalina.sh commons-daemon-native.tar.gz daemon.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh
ubuntu@VM-179-90:/home/apache-tomcat-8.5.23/bin$ vi catalina.sh
在catalina.sh文件里添加上面复制的jvm参数
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000'
# UMASK (Optional) Override Tomcat's default UMASK of 0027
#
# USE_NOHUP (Optional) If set to the string true the start command will
# use nohup so that the Tomcat process will ignore any hangup
# signals. Default is "false" unless running on HP-UX in which
# case the default is "true"
# -----------------------------------------------------------------------------
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000'
# OS specific support. $var _must_ be set to either true or false.
大概在文件头部注释结束的地方加入,如上所示,保存并退出。
ps:需要注意的是address配置的端口8000是能够外网访问的,在后面idea的配置中需要用到的
两步配置完毕后,确保远程的tomcat是启动的,然后以Debug方式启动本机的Remote,当IDEA控制台打印如下语句表示成功
Connected to the target VM, address: '192.168.0.3:8000', transport: 'socket'
这个时候就可以远程调试代码了