idea下配置远程调试

1、springboot项目配置远程调试

1)idea导入springboot源码并使用maven打包成jar

2)idea配置远程调试(选择remote debug并配置host和port)

1.png

3)复制idea中remote debug中的的remote JVM参数

springboot项目以远程调试模式运行

  1. java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar

4)源码中配置断点,在springboot项目启动之后点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。

2.png

2、docker下springboot项目配置远程调试

1)idea导入springboot源码并使用maven打包成jar

2)idea配置远程调试(选择remote debug并配置host和port)
1.png

3)复制idea中remote debug中的的remote JVM参数

docker-compose文件中添加远程调试配置(command中配置远程调试参数并映射出5005端口)

  1. java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar

docker-compose.yml示例:

  1. version: '2'
  2. services:
  3. web:
  4. image: aptxx
  5. ports:
  6. - "8080:8080"
  7. - "5005:5005"
  8. command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar

4)源码中配置断点,在docker-compose up -d启动项目后点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。

2.png

3、docker下tomcat项目配置远程调试

1)idea导入tomcat源码并使用maven打包成jar

2)idea配置远程调试(选择remote debug并配置host和port)
1.png

3)docker配置文件添加远程调试配置

a、远程调试环境参数配置

  1. TZ: Asia/Shanghai
  2. JPDA_ADDRESS: 0.0.0.0:5005
  3. JPDA_TRANSPORT: dt_socket

b、tomcat以远程调试模式启动

  1. catalina.sh jpda run

docker-compose.yml示例:

  1. version: '2'
  2. services:
  3. tomcat:
  4. image: tomcat:8
  5. container_name: test
  6. ports:
  7. - "8080:8080"
  8. - "5005:5005"
  9. volumes:
  10. - ./target/demo.war:/usr/local/tomcat/webapps/demo.war:rw
  11. environment:
  12. TZ: Asia/Shanghai
  13. JPDA_ADDRESS: 0.0.0.0:5005
  14. JPDA_TRANSPORT: dt_socket
  15. # CATALINA_OPTS: "-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,suspend=n,server=y"
  16. command: [ "catalina.sh", "jpda", "run" ]

4)源码中设置断点,在docker-compose up -d启动项目后点击远程调试debug按钮,console控制台显示connected…即远程调试开启成功,访问项目即可跳到设置的断点处。

2.png

4、只有docker-compose文件时springboot的远程调试

1)使用docker-compose up -d启动项目,然后使用docker cp将docker中的代码包(例如xxx.jar)导出

  1. docker cp docker容器id:项目包位置 .

示例:

  1. docker cp xxxxx:/app.jar .

2)idea导入代码

a、idea新建一个空项目

b、将app.jar解压后的文件直接复制到新项目中
4.png

c、将BOOT-INF下lib库添加为当前项目依赖

5.png

d、配置jdk版本、将classess文件也添加到依赖里,这样调试时才能跳转到classess文件中的断点

6.png

e、将docker-compose.yml文件也复制到新项目中,主要是为了方便后续操作

2)idea配置远程调试(选择remote debug并配置host和port)

1.png

3)配置docker-compose文件(command中添加远程调试参数并映射出5005端口)

  1. -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

docker-compose.yml示例:

  1. version: '2'
  2. services:
  3. web:
  4. image: aptxx
  5. ports:
  6. - "8080:8080"
  7. - "5005:5005"
  8. 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…即远程调试开启成功,访问项目即可跳到设置的断点处。
7.png

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…即远程调试开启成功,访问项目即可跳到设置的断点处。
2.png

调试可能遇到的问题

1、idea无法查看导入jar包里函数方法内容

9.png

解决:

在preference/settings选项中找到plugins,查看Java Bytecode Decompiler插件是否是打开状态

8.png

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”