springboot使用IDEA远程Debug
springboot使用IDEA远程Debug
项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug。
线上的代码一定要和本地的一致!
环境:
2.1.4.RELEASE(org.springframework.boot)
jdk1.8
Apache Maven 3.5.0
1、先创建一个准备远程调试的Demo,注意构建项目的配置
xsi:schemaLocation="http://maven.apache /POM/4.0.0 https://maven.apache /xsd/maven-4.0.0.xsd"
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.remote.test
remote_test
0.0.1-SNAPSHOT
remote_test
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.junit.jupiter
junit-jupiter-api
RELEASE
test
org.apache.maven.plugins
maven-shade-plugin
2.2
org.springframework.boot
spring-boot-maven-plugin
2.1.4.RELEASE
true
false
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
package
shade
${project.artifactId}-${project.version}-all
META-INF/spring.handlers
META-INF/spring.factories
META-INF/spring.schemas
com.remote.test.remote_test.RemoteTestApplication
xsi:schemaLocation="http://maven.apache /POM/4.0.0 https://maven.apache /xsd/maven-4.0.0.xsd"
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.remote.test
remote_test
0.0.1-SNAPSHOT
remote_test
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.junit.jupiter
junit-jupiter-api
RELEASE
test
org.apache.maven.plugins
maven-shade-plugin
2.2
org.springframework.boot
spring-boot-maven-plugin
2.1.4.RELEASE
true
false
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
package
shade
${project.artifactId}-${project.version}-all
META-INF/spring.handlers
META-INF/spring.factories
META-INF/spring.schemas
com.remote.test.remote_test.RemoteTestApplication
package com.remote.test.remote_test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("remote/test")
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@PostMapping("selectByUserId")
public String selectUserInfo(@RequestParam("userId") String userId) {
try {
Map userInfo = new HashMap< ();
userInfo.put("userId",userId);
userInfo.put("age",23);
userInfo.put("name","yanshao");
userInfo.put("address","shanghai");
logger.info("Query user information by user ID. userInfo: {}",userInfo.toString());
return this.success(userInfo);
} catch (Exception e) {
logger.error("Query user information by user ID. userId:{} ", userId, e);
return this.fail();
}
}
private String success(Object data){
Map res = new HashMap< ();
res.put("code",0);
res.put("desc","success");
res.put("data",data);
return res.toString();
}
private String fail(){
Map res = new HashMap< ();
res.put("code",1);
res.put("desc","fail");
return res.toString();
}
}
2、打包
输入:mvn clean package,(大概需要等几分钟),最好在构建之前指定本地repository,就不需要重新下载jar包了。
3、在IDEA配置远程Debug
指定socket port = 8081,指定准备debug的模块
4、在终端启动刚才打好的jar包
a. 先在IDEA启动debug
b. 然后在终端输入命令:java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar
5、测试
在准备请求的接口上标记断点
注意:必须先在IDEA启动Debug,然后再启动项目
➜ Desktop java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar
ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]