一篇文章詳解JAVA遠(yuǎn)程debug
1.什么是遠(yuǎn)程debug?
遠(yuǎn)程debug,也就是可以在本地debug遠(yuǎn)端部署的程序,這對(duì)于定位遠(yuǎn)端環(huán)境中的問(wèn)題非常有用,之所以我們說(shuō)是遠(yuǎn)端環(huán)境,而不說(shuō)是對(duì)定位生產(chǎn)環(huán)境中的bug很有用,是因?yàn)檫h(yuǎn)程調(diào)試通常在開(kāi)發(fā)和測(cè)試階段使用,而不建議在生產(chǎn)環(huán)境中使用,因?yàn)榭赡軙?huì)對(duì)性能產(chǎn)生影響。當(dāng)然,在沒(méi)有辦法的時(shí)候使用遠(yuǎn)程debug,是最高效的定位生產(chǎn)問(wèn)題的手段之一。
遠(yuǎn)程debug可以理解為一種JVM規(guī)范,當(dāng)然其不是單獨(dú)的一個(gè)規(guī)范,它是屬于JDWP(Java Debug Wire Protocol)協(xié)議中的一部分,該協(xié)議定義了 Java 虛擬機(jī)(JVM)與調(diào)試器之間的交互方式。通過(guò) JDWP,開(kāi)發(fā)者可以在開(kāi)發(fā)工具中設(shè)置斷點(diǎn)、查看變量、執(zhí)行代碼等操作,以便對(duì)運(yùn)行中的 Java 程序進(jìn)行調(diào)試。說(shuō)直白點(diǎn)就是遵循了該協(xié)議的JVM,就支持debug,也支持遠(yuǎn)程debug。
2.遠(yuǎn)程debug普通JAVA程序
2.1.環(huán)境
- JDK:1.8
- 編譯器:IDEA
2.2.測(cè)試程序
這里我們寫(xiě)了很簡(jiǎn)單一個(gè)測(cè)試程序,每1秒,i自加1,然后將其打包成jar包
public static void main(String[] args) throws InterruptedException { int i=0; while (true){ Thread.sleep(1000); i++; } }
我估計(jì)很多同學(xué)一下會(huì)忘了這么在IDEA中將普通java se程序如何打包成jar了,這里貼心一點(diǎn),給出打包方法,用打包jar包的maven插件,指定好main入口,然后install即可:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>com.eryi.Test</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
2.3.程序啟動(dòng)指令
要遠(yuǎn)程debug,首先在程序啟動(dòng)時(shí)就要用參數(shù)開(kāi)啟遠(yuǎn)程debug,完成參數(shù)指令如下:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<host>:<port>
transport
:指定調(diào)試信息傳輸?shù)姆绞?,一般使?nbsp;dt_socket
。server
:指定是否為調(diào)試服務(wù)端,使用y
表示是。suspend
:指定是否在啟動(dòng)時(shí)暫停,使用n
表示不暫停。address
:指定調(diào)試監(jiān)聽(tīng)的主機(jī)和端口,也就是通過(guò)該端口來(lái)進(jìn)行遠(yuǎn)程debug的。
以我們上面的程序?yàn)槔?,完成的啟?dòng)命令為:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:5005 -jar test-1.0-SNAPSHOT.jar
啟動(dòng)成功會(huì)顯示正在監(jiān)聽(tīng)debug的端口:
2.4.編譯器配置
我們想要在IDEA中遠(yuǎn)程debug,需要進(jìn)行配置:
add configurations
add new configuration—>remote
配置:
開(kāi)始debug:
可以看到程序進(jìn)入了斷點(diǎn)。
3.遠(yuǎn)程debug JAVA Web程序
tomcat作為常用的web server為了方便使用,自然也支持了遠(yuǎn)程debug的功能。普通java程序是用java -jar啟動(dòng),tomcat是用啟動(dòng)腳本啟動(dòng),啟動(dòng)腳本里記錄的就是tomcat啟動(dòng)要執(zhí)行的所有命令,遠(yuǎn)程debug也寫(xiě)在里面。
Windows環(huán)境下修改start.sh,在第一行加上以下命令:
export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=<host>:<port>,server=y,suspend=n"
Linux環(huán)境下修改start.bat,在第一行加上以下命令:
set "CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=<host>:<port>,server=y,suspend=n"
4.遠(yuǎn)程debug spring boot程序
spring boot項(xiàng)目作為一個(gè)jar,是可以用java -jar然后跟參數(shù)這種啟動(dòng)普通Java程序debug的方式來(lái)進(jìn)行debug的,除此之外,spring boot還提供了一個(gè)更方便的遠(yuǎn)程debug的方式,就是將參數(shù)配置在spring boot的打包插件中。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<host>:<port></jvmArguments> </configuration> </plugin> </plugins> </build>
總結(jié)
到此這篇關(guān)于JAVA遠(yuǎn)程debug的文章就介紹到這了,更多相關(guān)JAVA遠(yuǎn)程debug內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在IDEA中使用debug工具去運(yùn)行java程序的實(shí)現(xiàn)步驟
- Arthas-java程序運(yùn)行時(shí)debug工具使用
- java開(kāi)啟遠(yuǎn)程debug竟有兩種參數(shù)(最新推薦)
- Java平臺(tái)調(diào)試體系原理分析和實(shí)踐整理 遠(yuǎn)程Debug
- java程序員必會(huì)的遠(yuǎn)程debug教程
- IntelliJ IDEA遠(yuǎn)程Debug Linux的Java程序,找問(wèn)題不要只會(huì)看日志了(推薦)
- java實(shí)現(xiàn)線(xiàn)上環(huán)境遠(yuǎn)程debug調(diào)試過(guò)程
相關(guān)文章
Java請(qǐng)求調(diào)用參數(shù)格式為form-data類(lèi)型的接口代碼示例
這篇文章主要給大家介紹了關(guān)于Java請(qǐng)求調(diào)用參數(shù)格式為form-data類(lèi)型的接口的相關(guān)資料,文中給出了詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Java如何使用poi導(dǎo)入導(dǎo)出excel工具類(lèi)
這篇文章主要介紹了Java如何使用poi導(dǎo)入導(dǎo)出excel工具類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06解決springboot運(yùn)行出現(xiàn)錯(cuò)誤:找不到或無(wú)法加載主類(lèi)com.xxxx.xxxx.Application問(wèn)題
文章介紹了在服務(wù)器上運(yùn)行一個(gè)未使用的Java項(xiàng)目時(shí)遇到的“找不到或無(wú)法加載主類(lèi)”錯(cuò)誤,并提供了兩種解決方法:通過(guò)Maven install或build …、Goals輸入install并跳過(guò)測(cè)試來(lái)重新構(gòu)建項(xiàng)目2024-11-11Java線(xiàn)程狀態(tài)運(yùn)行原理解析
這篇文章主要介紹了Java線(xiàn)程狀態(tài)運(yùn)行原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter)
本文主要介紹了Spring Security6配置方法(廢棄WebSecurityConfigurerAdapter),就像文章標(biāo)題所說(shuō)的,SpringSecurity已經(jīng)廢棄了繼承WebSecurityConfigurerAdapter的配置方式,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2023-12-12java面向?qū)ο笾畬W(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java面向?qū)ο笾畬W(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03