Spring Boot项目以及Tomcat Web项目远程调试
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项目
创建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.
启动本地项目
本地调试测试
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136930.html