Java遠(yuǎn)程debug調(diào)試的操作步驟
idea啟動(dòng)java項(xiàng)目,debug調(diào)試遠(yuǎn)程項(xiàng)目代碼操作步驟:
1、將項(xiàng)目打成jar包,上傳服務(wù)器,使用命令啟動(dòng)jar
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
啟動(dòng)命令解析: 這個(gè)命令使用的是主類名啟動(dòng)
,而非 -jar myApp.jar的方式。
1.1、解析啟動(dòng)命令含義
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889
是一個(gè)用于啟動(dòng) Java 程序并開啟遠(yuǎn)程調(diào)試功能的命令。下面為你詳細(xì)解釋該命令中各個(gè)部分的含義:
1.2、整體命令結(jié)構(gòu)
java
:這是 Java 虛擬機(jī)(JVM)的啟動(dòng)命令,用于執(zhí)行 Java 程序。-agentlib:jdwp
:這是一個(gè) JVM 選項(xiàng),用于加載 Java 調(diào)試線協(xié)議(Java Debug Wire Protocol,JDWP)代理庫(kù)。JDWP 是一種允許調(diào)試器與被調(diào)試的 Java 虛擬機(jī)進(jìn)行通信的協(xié)議,借助這個(gè)選項(xiàng)就能讓 JVM 支持遠(yuǎn)程調(diào)試。
1.3、JDWP 選項(xiàng)參數(shù)
transport=dt_socket
:指定了調(diào)試器與 JVM 之間的通信傳輸方式。dt_socket
表示使用套接字(socket)進(jìn)行通信,也就是通過網(wǎng)絡(luò)來傳輸調(diào)試信息,這是最常用的傳輸方式。server=y
:表明當(dāng)前 JVM 會(huì)作為調(diào)試服務(wù)器。意味著它會(huì)監(jiān)聽一個(gè)指定的端口,等待外部調(diào)試器(如 IDE 中的調(diào)試工具)來連接。suspend=n
:suspend
參數(shù)用于控制 JVM 在啟動(dòng)時(shí)是否暫停執(zhí)行。n
代表no
,即 JVM 啟動(dòng)后不會(huì)暫停,會(huì)正常執(zhí)行 Java 程序,調(diào)試器可以在程序運(yùn)行過程中隨時(shí)連接進(jìn)行調(diào)試。若設(shè)置為suspend=y
,JVM 啟動(dòng)后會(huì)暫停,直到調(diào)試器連接成功才會(huì)繼續(xù)執(zhí)行。address=8889
:指定了 JVM 監(jiān)聽的端口號(hào)。這里 JVM 會(huì)在 8889 端口上等待調(diào)試器的連接。在啟動(dòng)調(diào)試器時(shí),需要配置相同的端口號(hào),以確保調(diào)試器能夠與 JVM 建立連接。
1.4、示例場(chǎng)景
假設(shè)你有一個(gè)名為 MyApp
的 Java 程序,完整的啟動(dòng)命令可能如下:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
此命令會(huì)啟動(dòng) MyApp
程序,并開啟遠(yuǎn)程調(diào)試功能,允許外部調(diào)試器通過 8889 端口連接到該 JVM 進(jìn)行調(diào)試。
2、idea設(shè)置遠(yuǎn)程調(diào)試
idea打開java項(xiàng)目后,設(shè)置remote jvm debug,選擇項(xiàng)目模塊,host地址是jar包部署到服務(wù)器的地址,port是使用java命令啟用的等待調(diào)試器鏈接的端口。
3、執(zhí)行debug
點(diǎn)擊debug啟動(dòng)項(xiàng)目,在瀏覽器上輸入:http://10.1.2.133:8889/user/findAll 在idea中findAll方法中打上斷點(diǎn),訪問這個(gè)url后,斷點(diǎn)就會(huì)收到調(diào)用,就可以debug調(diào)試項(xiàng)目了。
4、java命令啟動(dòng)項(xiàng)目,使用-jar myApp.jar與主類名啟動(dòng)myApp的區(qū)別:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 -jar myApp.jar
解析: 服務(wù)器啟動(dòng)java項(xiàng)目,可以啟動(dòng)jar包或者尋找主類名啟動(dòng)。
這個(gè)命令不一定非要使用 -jar xxx.jar
來指定啟動(dòng)的 JAR 包。是否使用 -jar
選項(xiàng)取決于你啟動(dòng) Java 程序的方式。下面為你詳細(xì)分析不同情況:
情況一:使用主類名啟動(dòng)
如果你像給出的命令 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
這樣,直接指定主類名(MyApp
)來啟動(dòng) Java 程序,那么就不需要 -jar
選項(xiàng)。這種方式要求主類 MyApp
必須位于類路徑(classpath
)下,JVM 會(huì)在類路徑中找到這個(gè)類并執(zhí)行其 main
方法。
情況二:使用 JAR 包啟動(dòng)
當(dāng)你想通過 JAR 包來啟動(dòng) Java 程序時(shí),就需要使用 -jar
選項(xiàng)。此時(shí),你需要把 MyApp
替換為具體的 JAR 包名稱,例如:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 -jar myapp.jar
在這個(gè)命令里,-jar myapp.jar
告知 JVM 從 myapp.jar
這個(gè) JAR 包中尋找主類并執(zhí)行。要注意的是,這個(gè) JAR 包必須是可執(zhí)行的,也就是在其 MANIFEST.MF
文件中指定了主類。
總結(jié)
是否使用 -jar
選項(xiàng)要依據(jù)你的啟動(dòng)需求來定:
- 若主類在類路徑中,可直接指定主類名啟動(dòng),無需
-jar
選項(xiàng)。 - 若要從 JAR 包啟動(dòng)程序,則需使用
-jar
選項(xiàng)指定 JAR 包名稱。
到此這篇關(guān)于Java遠(yuǎn)程debug調(diào)試的操作步驟的文章就介紹到這了,更多相關(guān)Java遠(yuǎn)程debug調(diào)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java fastdfs客戶端實(shí)現(xiàn)上傳下載文件
這篇文章主要介紹了Java fastdfs客戶端實(shí)現(xiàn)上傳下載文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10SpringMVC使用@Valid注解進(jìn)行數(shù)據(jù)驗(yàn)證的方法
本篇文章主要介紹了SpringMVC使用@Valid注解進(jìn)行數(shù)據(jù)驗(yàn)證的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02SpringBoot配置ShedLock分布式定時(shí)任務(wù)
ShedLock是一個(gè)在分布式環(huán)境中使用的定時(shí)任務(wù)框架,這篇文章主要介紹了SpringBoot配置ShedLock分布式定時(shí)任務(wù),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05解決idea的debug模式突然變卡,項(xiàng)目啟動(dòng)變慢的狀況
這篇文章主要介紹了解決idea的debug模式突然變卡,項(xiàng)目啟動(dòng)變慢的狀況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02java實(shí)現(xiàn)員工工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra
這篇文章主要介紹了使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10