Skip to content

六、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

image-20230516094657627

2、添加Remote

image-20230516094753649

3、修改配置

image-20230516095127063

注意:注意端口别被占用。后续这个端口是用来跟远程的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 &
  1. nohup:这是一个 Linux 命令,用于在后台运行一个进程,并且让该进程不会受到终端关闭的影响。也就是说,当你关闭终端窗口时,该进程仍然会继续运行。
  2. java:这是要运行的 Java 程序的可执行文件。
  3. -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 服务监听的端口号。
  4. -jar java-devops-demo.jar:这是要运行的 Java 程序的 JAR 文件。
  5. &:这个符号表示将该命令放到后台运行。也就是说,当你执行该命令后,该命令就会立即返回,而该 Java 程序会在后台运行。

5、启动远程连接

  • 先启动服务-第四步

image-20230516095424351

image-20230516095507301

断点打好后,发请求就会进来了

image-20230516100056460

6、一些说明

1、jar包代码和本地不一致会怎么样?

debug的时候的行数会对不上

2、日志打印在哪里?

日志不会打印在IDEA的控制台上。即System.out 以及 log.info 还是打印在远程的。

3、调试时其他人会不会卡住?

使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的?会卡住吗?会的