使用IntelliJ IDEA对Spring Boot项目以及Tomcat Web项目进行远程调试

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 使用IntelliJ IDEA对Spring Boot项目以及Tomcat Web项目进行远程调试,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Spring Boot

新建Spring Boot项目

新建Spring Boot项目,添加一个test接口,用于远程调试测试。

@RestController
@Slf4j
public class TestController {

    @RequestMapping("/test")
    public String test() {
        for (int i = 0; i < 10; i++) {
            log.info("i value :{}", i);
        }
        return "test";
    }
}

编译打包

项目执行编译打包命令,将target/debug-0.0.1-SNAPSHOT.jar上传云服务器

mvn clean package -Dmaven.test.skip=true

JVM调试配置

新建一个远程调试配置
在这里插入图片描述
设置远程IP与调试端口
在这里插入图片描述
复制远程JVM的命令行参数

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8081 

启动远程项目

在服务器执行如下命令:

[root@administrator target]# java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8081 debug-0.0.1-SNAPSHOT.jar
Listening for transport dt_socket at address: 8081

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.8.RELEASE)

2022-07-07 17:25:03.130  INFO 4842 --- [           main] cn.ybzy.debug.DebugApplication           : Starting DebugApplication v0.0.1-SNAPSHOT on administrator with PID 4842 (/root/IDEA/target/debug-0.0.1-SNAPSHOT.jar started by root in /root/IDEA/target)
2022-07-07 17:25:03.149  INFO 4842 --- [           main] cn.ybzy.debug.DebugApplication           : No active profile set, falling back to default profiles: default
2022-07-07 17:25:06.400  INFO 4842 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-07-07 17:25:06.430  INFO 4842 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-07-07 17:25:06.435  INFO 4842 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
2022-07-07 17:25:06.618  INFO 4842 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-07-07 17:25:06.618  INFO 4842 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3216 ms
2022-07-07 17:25:07.317  INFO 4842 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2022-07-07 17:25:07.851  INFO 4842 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-07-07 17:25:07.880  INFO 4842 --- [           main] cn.ybzy.debug.DebugApplication           : Started DebugApplication in 6.469 seconds (JVM running for 7.721)

启动本地项目

在这里插入图片描述

本地调试测试

访问:http://IP:8080/test

在这里插入图片描述

Tocmat

创建Web项目

创建一个简单的Web项目
在这里插入图片描述

创建Servlet

添加Servlet API JAR依赖

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

创建一个简单的Servlet用于调试测试

@WebServlet(name = "TestController", urlPatterns = "/test")
public class TestController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        for (int i = 0; i < 10; i++) {
            System.out.println("i value is " + i);
        }
        // 设置响应类型
        resp.setContentType("text/html");
        // 获取输出流
        PrintWriter pw = resp.getWriter();
        // 写入响应
        pw.write("<h1>Hello, world!</h1>");
        // flush强制输出
        pw.flush();
    }
}

编译打包

项目执行编译打包命令,将target/debug.war上传云服务器

mvn clean package -Dmaven.test.skip=true

JVM调试配置

新建远程调试配置,设置远程IP与调试端口
在这里插入图片描述
复制远程JVM的命令行参数

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8081

配置catalina文件

Windows环境,修改catalina.bat文件

set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081

Linux环境,修改catalina.sh文件

CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081"

参数说明

-XDebug        			启用调试
-Xnoagent      			禁用默认sun.tools.debug调试器
-Djava.compiler=NONE   禁止JIT编译器的加载 
-Xrunjdwp              加载JVM的JPDA参考实现库
	transport                用于在调试程序和VM使用的进程之间通讯 
	dt_socket                 套接字传输
	server=y/n                VM是否需要作为调试服务器执行
	suspend=y/n                是否在调试客户端建立连接之后启动VM  
	address=8081               调试服务器的端口号,客户端用来连接服务器的端口号

以Linux环境测试:修改catalina.sh,添加CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081"参数

在这里插入图片描述

启动远程项目

将上传的debug.war文件移动到tomcat/webapps目录

进入tomcat/bin目录启动tomcat

[root@administrator bin]# pwd
/usr/local/tomcat/bin
[root@administrator bin]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081
Tomcat started.

启动本地项目

在这里插入图片描述

本地调试测试

访问http://IP:8080/debug/test
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136930.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!