Appearance
六、IDEA远程Debug调试
1、准备一个SpringBoot应用
java
@GetMapping("/hello")
public String hello(){
logger.info("111111111111111");
int num = 0;
System.out.println(num++);
System.out.println(num++);
System.out.println(num);
return "hello java devops";
}
这里只列出了controller,其他代码省略
2、Maven打成jar包
sh
mvn clean package -Dmaven.test.skip=true
如果打完包运行的时候报找不到main主清单,到pom文件中添加以下内容
xml
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
3、IDEA添加remote连接
1、选择 Edit Configuration
2、添加Remote
3、修改配置
注意:注意端口别被占用。后续这个端口是用来跟远程的java进程通信的。
可以注意到:切换不同的jdk版本,生成的脚本不一样
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
4、上传到Linux运行
sh
nohup java \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006 \
-jar java-devops-demo.jar &
nohup
:这是一个 Linux 命令,用于在后台运行一个进程,并且让该进程不会受到终端关闭的影响。也就是说,当你关闭终端窗口时,该进程仍然会继续运行。java
:这是要运行的 Java 程序的可执行文件。-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
:这是一个 JVM 参数,用于启用 JDWP 远程调试服务。其中,transport=dt_socket
指定了 JDWP 使用 socket 连接,server=y
表示该 JVM 实例将作为服务器,suspend=n
表示 JVM 启动后不会暂停等待调试器连接,address=6006
指定了 JDWP 服务监听的端口号。-jar java-devops-demo.jar
:这是要运行的 Java 程序的 JAR 文件。&
:这个符号表示将该命令放到后台运行。也就是说,当你执行该命令后,该命令就会立即返回,而该 Java 程序会在后台运行。
5、启动远程连接
- 先启动服务-第四步
断点打好后,发请求就会进来了
6、一些说明
1、jar包代码和本地不一致会怎么样?
debug的时候的行数会对不上
2、日志打印在哪里?
日志不会打印在IDEA的控制台上。即System.out
以及 log.info
还是打印在远程的。
3、调试时其他人会不会卡住?
使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的?会卡住吗?会的