idea下配置远程调试
1、springboot项目配置远程调试
1)idea导入springboot源码并使用maven打包成jar
2)idea配置远程调试(选择remote debug并配置host和port)
3)复制idea中remote debug中的的remote JVM参数
springboot项目以远程调试模式运行
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar
4)源码中配置断点,在springboot项目启动之后点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。
2、docker下springboot项目配置远程调试
1)idea导入springboot源码并使用maven打包成jar
2)idea配置远程调试(选择remote debug并配置host和port)
3)复制idea中remote debug中的的remote JVM参数
docker-compose文件中添加远程调试配置(command中配置远程调试参数并映射出5005端口)
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar
docker-compose.yml示例:
version: '2'
services:
web:
image: aptxx
ports:
- "8080:8080"
- "5005:5005"
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar
4)源码中配置断点,在docker-compose up -d启动项目后点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。
3、docker下tomcat项目配置远程调试
1)idea导入tomcat源码并使用maven打包成jar
2)idea配置远程调试(选择remote debug并配置host和port)
3)docker配置文件添加远程调试配置
a、远程调试环境参数配置
TZ: Asia/Shanghai
JPDA_ADDRESS: 0.0.0.0:5005
JPDA_TRANSPORT: dt_socket
b、tomcat以远程调试模式启动
catalina.sh jpda run
docker-compose.yml示例:
version: '2'
services:
tomcat:
image: tomcat:8
container_name: test
ports:
- "8080:8080"
- "5005:5005"
volumes:
- ./target/demo.war:/usr/local/tomcat/webapps/demo.war:rw
environment:
TZ: Asia/Shanghai
JPDA_ADDRESS: 0.0.0.0:5005
JPDA_TRANSPORT: dt_socket
# CATALINA_OPTS: "-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,suspend=n,server=y"
command: [ "catalina.sh", "jpda", "run" ]
4)源码中设置断点,在docker-compose up -d启动项目后点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。
4、只有docker-compose文件时springboot的远程调试
1)使用docker-compose up -d启动项目,然后使用docker cp将docker中的代码包(例如xxx.jar)导出
docker cp docker容器id:项目包位置 .
示例:
docker cp xxxxx:/app.jar .
2)idea导入代码
a、idea新建一个空项目
b、将app.jar解压后的文件直接复制到新项目中
c、将BOOT-INF下lib库添加为当前项目依赖
d、配置jdk版本、将classess文件也添加到依赖里,这样调试时才能跳转到classess文件中的断点
e、将docker-compose.yml文件也复制到新项目中,主要是为了方便后续操作
2)idea配置远程调试(选择remote debug并配置host和port)
3)配置docker-compose文件(command中添加远程调试参数并映射出5005端口)
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
docker-compose.yml示例:
version: '2'
services:
web:
image: aptxx
ports:
- "8080:8080"
- "5005:5005"
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar
4)设置断点、运行项目并利用idea开启远程调试
a、系统源码在classes文件夹中,在classes文件中配置断点
b、在docker-compose up -d启动项目后
c、idea点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。
4、只有docker-compose文件时tomcat的远程调试
1、将docker中的tomcat/webapps下的项目复制出来
2、idea导入该项目源码,将WEB-INF/lib文件夹标记为依赖库
3、docker-compose配置远程调试,参考
4、设置断点、开启调试
a、在WEB-INF/classes中设置断点
b、docker-compose up -d启动项目
c、idea点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。
调试可能遇到的问题
1、idea无法查看导入jar包里函数方法内容
解决:
在preference/settings选项中找到plugins,查看Java Bytecode Decompiler插件是否是打开状态
2、docker-compose配置”catalina.sh”, “jpda”, “run” 提示docker容器创建失败
container_linux.go:380: starting container process caused: exec: “catalina.sh“: executable file not found in $PATH: unknown
解决:
没有cataline.sh命令,需要使用绝对路径访问该命令,例如 “/app/tomcat/catalina.sh”, “jpda”, “run”