springboot使用IDEA遠(yuǎn)程Debug
項(xiàng)目上線之后,如果日志打印的很模糊或者業(yè)務(wù)邏輯比較復(fù)雜,有時(shí)候無(wú)法定位具體的錯(cuò)誤原因,因此可以通過(guò)IDEA遠(yuǎn)程代理進(jìn)行Debug。
線上的代碼一定要和本地的一致!
環(huán)境:
2.1.4.RELEASE(org.springframework.boot) jdk1.8 Apache Maven 3.5.0 1、先創(chuàng)建一個(gè)準(zhǔn)備遠(yuǎn)程調(diào)試的Demo,注意構(gòu)建項(xiàng)目的配置<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd'><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.remote.test</groupId><artifactId>remote_test</artifactId><version>0.0.1-SNAPSHOT</version><name>remote_test</name><description>Demo project for Spring Boot</description> <properties><java.version>1.8</java.version></properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>RELEASE</version><scope>test</scope></dependency></dependencies> <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.2</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.4.RELEASE</version></dependency></dependencies><configuration><keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope><createDependencyReducedPom>false</createDependencyReducedPom><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><finalName>${project.artifactId}-${project.version}-all</finalName><transformers><transformer implementation='org.apache.maven.plugins.shade.resource.AppendingTransformer'><resource>META-INF/spring.handlers</resource></transformer><transformer implementation='org.springframework.boot.maven.PropertiesMergingResourceTransformer'><resource>META-INF/spring.factories</resource></transformer><transformer implementation='org.apache.maven.plugins.shade.resource.AppendingTransformer'><resource>META-INF/spring.schemas</resource></transformer><transformer implementation='org.apache.maven.plugins.shade.resource.ServicesResourceTransformer'/><transformer implementation='org.apache.maven.plugins.shade.resource.ManifestResourceTransformer'><!--根據(jù)項(xiàng)目的全名指定啟動(dòng)類(lèi)--> <mainClass>com.remote.test.remote_test.RemoteTestApplication</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build></project>
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<String,Object> 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<String,Object> res = new HashMap<>();res.put('code',0);res.put('desc','success');res.put('data',data);return res.toString(); } private String fail(){Map<String,Object> res = new HashMap<>();res.put('code',1);res.put('desc','fail');return res.toString(); } }2、打包
輸入:mvn clean package,(大概需要等幾分鐘),最好在構(gòu)建之前指定本地repository,就不需要重新下載jar包了。


指定socket port = 8081,指定準(zhǔn)備debug的模塊

a. 先在IDEA啟動(dòng)debug

b. 然后在終端輸入命令:java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar

在準(zhǔn)備請(qǐng)求的接口上標(biāo)記斷點(diǎn)



注意:必須先在IDEA啟動(dòng)Debug,然后再啟動(dòng)項(xiàng)目
➜ Desktop java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jarERROR: transport error 202: connect failed: Connection refusedERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
到此這篇關(guān)于springboot使用IDEA遠(yuǎn)程Debug的文章就介紹到這了,更多相關(guān)springboot IDEA遠(yuǎn)程Debug內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)2. idea設(shè)置代碼格式化的方法步驟3. docker容器調(diào)用yum報(bào)錯(cuò)的解決辦法4. IntelliJ IDEA導(dǎo)出項(xiàng)目的方法5. idea環(huán)境下Maven無(wú)法正常下載pom中配置的包問(wèn)題6. vue+elementUI下拉框回顯問(wèn)題及解決方式7. VMware中如何安裝Ubuntu8. 淺談JavaScript宏任務(wù)和微任務(wù)執(zhí)行順序9. idea導(dǎo)入maven項(xiàng)目的方法10. Python幾種常見(jiàn)算法匯總

網(wǎng)公網(wǎng)安備