遠(yuǎn)程debug調(diào)試入門
1.遠(yuǎn)程DEBUG的必要性
由于部署環(huán)境的差異性,相信很多朋友都碰到過開發(fā)環(huán)境正常測試過的功能在測試環(huán)境甚至生產(chǎn)環(huán)境下出現(xiàn)bug的情況。一般情況下,生產(chǎn)環(huán)境可以采取的手段比較單一,即通過日志的方式獲取運(yùn)行中的環(huán)境上下文,分析日志文件并嘗試重現(xiàn)bug。這會(huì)帶來的問題還是不少的,首先,日志的分析是一項(xiàng)比較耗時(shí)的工作;其次,現(xiàn)有的日志記錄不一定能反映出問題,你可能需要多次重復(fù)這個(gè)過程(分析日志->猜測問題->加日志->部署->獲取日志)來慢慢逼近問題。倘若是測試環(huán)境,我們還多了一項(xiàng)可供選擇的手段——遠(yuǎn)程調(diào)試——將程序在測試環(huán)境中以debug模式啟動(dòng),在本機(jī)使用IDEA在工程中設(shè)置斷點(diǎn)進(jìn)行調(diào)試。
2,IDEA構(gòu)建SpringBoot測試Demo
新建SpringBoot測試項(xiàng)目remote-debug
,只需要web依賴支持即可;版本選用2.2.6.RELEASE(注意,別用2.5.1版本,有坑,親測)
pom.xml:
<?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.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.java1234</groupId> <artifactId>remote-debug</artifactId> <version>v1.0</version> <name>remote-debug</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-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml:
server: port: 80 servlet: context-path: / tomcat: uri-encoding: utf-8
簡單搞個(gè)TestController,提供一個(gè)Rest接口
package com.java1234.controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; /** * @author java1234_小鋒 * @site www.java1234.com * @company Java知識(shí)分享網(wǎng) * @create 2021-06-12 15:37 */ @RestController public class TestController { @PostMapping("/test") public String test(Integer id,String name){ System.out.println("id="+id); System.out.println("name="+name); if(id>0){ return "success "+name; }else{ return "fail"; } } }
我們啟動(dòng)項(xiàng)目,用postman測試下:
測試接口:http://localhost/test 加入Body form-data 參數(shù) id=1,name=marry,Send 測試,返回 success marry,測試OK;
3,測試Demo項(xiàng)目配置支持遠(yuǎn)程調(diào)試
pom.xml里配置jvmArguments
參數(shù) -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments> </configuration> </plugin> </plugins> </build>
加了此配置后,打包后的項(xiàng)目發(fā)布服務(wù)器,可支持遠(yuǎn)程DEBUG;
具體參數(shù)詳解:
-Xdebug 通知JVM工作在DEBUG模式下;
-Xrunjdwp 通知JVM使用(Java debug wire protocol)運(yùn)行調(diào)試環(huán)境。該參數(shù)同時(shí)包含了一系列的調(diào)試選項(xiàng);
**transport **指定了調(diào)試數(shù)據(jù)的傳送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享內(nèi)存方式,其中,dt_shmem只適用于Windows平臺(tái);
address 調(diào)試服務(wù)器的端口號(hào),客戶端用來連接服務(wù)器的端口號(hào);
server=y/n VM 是否需要作為調(diào)試服務(wù)器執(zhí)行;
suspend=y/n 是否在調(diào)試客戶端建立連接之后啟動(dòng) VM;
4,IDEA打包jar
我們打包jar包;
右側(cè)Maven工具,雙擊 package打包工具;
一般打包跳過test,可以點(diǎn)擊箭頭所指閃電圖標(biāo),這樣打包速度會(huì)快很多;
打包后,在target目錄下,會(huì)生成一個(gè)jar包;我們把它復(fù)制出來即可;
5,啟動(dòng)jar并且?guī)?dòng)參數(shù)支持遠(yuǎn)程調(diào)試
我們把remote-debug-v1.0.jar
放D盤根目錄;
我們啟動(dòng)jar,并且支持遠(yuǎn)程DEBUG;
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar remote-debug-v1.0.jar
啟動(dòng)OK,監(jiān)聽socket 5005端口
6,IDEA遠(yuǎn)程DEBUG配置
IDEA要進(jìn)行遠(yuǎn)程DEBUG,需要進(jìn)行配置;
1,啟動(dòng)項(xiàng)下拉,選擇 Edit Configurations...
編輯配置
2,點(diǎn)擊+
,選擇Remote
,添加遠(yuǎn)程DEBUG配置
3,添加遠(yuǎn)程DEBUG配置項(xiàng),Host和Port,配置后,點(diǎn)擊Apply
和OK
按鈕
7,IDEA遠(yuǎn)程DEBUG測試
1,打測試斷點(diǎn)
我們直接在TestController
類里的test方法上打點(diǎn)斷;
2,選擇遠(yuǎn)程debug啟動(dòng)項(xiàng),然后點(diǎn)擊測試調(diào)試按鈕啟動(dòng);
3,postman測試
4,成功進(jìn)入斷點(diǎn)
我們走完斷點(diǎn);
5,啟動(dòng)的jar包打印信息,測試OK
8,eclipse遠(yuǎn)程DEBUG實(shí)現(xiàn)
1,右擊項(xiàng)目 -> Debug As -> Debug Configurations…
2,找到 Remote Java Application
然后右擊 New
3,配置Host
和Port
,點(diǎn)擊Debug
按鈕,即可實(shí)現(xiàn)遠(yuǎn)程DEBUG
9,打war包方式配置遠(yuǎn)程DEBUG
如果打的是war包,需要兩個(gè)步驟:
1.將 web 應(yīng)用部署到 Tomcat 的 webapp 目錄下
2.修改 Tomcat/bin/startup.bat 文件,在最前面加上如下代碼:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java開發(fā)的工廠方法模式及抽象工廠驗(yàn)證示例
這篇文章主要為大家介紹了java開發(fā)中的工廠方法模式以及抽象工廠的驗(yàn)證示例,有需要的朋友可以借鑒參考下希望能夠有所幫助祝大家多多進(jìn)步2021-10-10SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫分離詳情
這篇文章主要介紹了SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫分離詳情,通過用??MySQL??進(jìn)行一主一從的主從復(fù)制展開全文內(nèi)容,需要的朋友可以參考一下2022-08-08Java引用傳遞實(shí)現(xiàn)方式以及與值傳遞的區(qū)別
這篇文章主要給大家介紹了關(guān)于Java引用傳遞實(shí)現(xiàn)方式以及與值傳遞的區(qū)別的相關(guān)資料,引用傳遞指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的地址直接傳遞到函數(shù)中,那么在函數(shù)中對(duì)參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù),需要的朋友可以參考下2023-09-09淺析Java進(jìn)制轉(zhuǎn)換、輸入、命名問題
這篇文章主要介紹了Java進(jìn)制轉(zhuǎn)換、輸入、命名問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Java參數(shù)傳遞實(shí)現(xiàn)代碼及過程圖解
這篇文章主要介紹了Java參數(shù)傳遞實(shí)現(xiàn)代碼及過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11