Java遠程debug調試的操作步驟
idea啟動java項目,debug調試遠程項目代碼操作步驟:
1、將項目打成jar包,上傳服務器,使用命令啟動jar
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
啟動命令解析: 這個命令使用的是主類名啟動
,而非 -jar myApp.jar的方式。
1.1、解析啟動命令含義
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889
是一個用于啟動 Java 程序并開啟遠程調試功能的命令。下面為你詳細解釋該命令中各個部分的含義:
1.2、整體命令結構
java
:這是 Java 虛擬機(JVM)的啟動命令,用于執(zhí)行 Java 程序。-agentlib:jdwp
:這是一個 JVM 選項,用于加載 Java 調試線協(xié)議(Java Debug Wire Protocol,JDWP)代理庫。JDWP 是一種允許調試器與被調試的 Java 虛擬機進行通信的協(xié)議,借助這個選項就能讓 JVM 支持遠程調試。
1.3、JDWP 選項參數(shù)
transport=dt_socket
:指定了調試器與 JVM 之間的通信傳輸方式。dt_socket
表示使用套接字(socket)進行通信,也就是通過網絡來傳輸調試信息,這是最常用的傳輸方式。server=y
:表明當前 JVM 會作為調試服務器。意味著它會監(jiān)聽一個指定的端口,等待外部調試器(如 IDE 中的調試工具)來連接。suspend=n
:suspend
參數(shù)用于控制 JVM 在啟動時是否暫停執(zhí)行。n
代表no
,即 JVM 啟動后不會暫停,會正常執(zhí)行 Java 程序,調試器可以在程序運行過程中隨時連接進行調試。若設置為suspend=y
,JVM 啟動后會暫停,直到調試器連接成功才會繼續(xù)執(zhí)行。address=8889
:指定了 JVM 監(jiān)聽的端口號。這里 JVM 會在 8889 端口上等待調試器的連接。在啟動調試器時,需要配置相同的端口號,以確保調試器能夠與 JVM 建立連接。
1.4、示例場景
假設你有一個名為 MyApp
的 Java 程序,完整的啟動命令可能如下:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
此命令會啟動 MyApp
程序,并開啟遠程調試功能,允許外部調試器通過 8889 端口連接到該 JVM 進行調試。
2、idea設置遠程調試
idea打開java項目后,設置remote jvm debug,選擇項目模塊,host地址是jar包部署到服務器的地址,port是使用java命令啟用的等待調試器鏈接的端口。
3、執(zhí)行debug
點擊debug啟動項目,在瀏覽器上輸入:http://10.1.2.133:8889/user/findAll 在idea中findAll方法中打上斷點,訪問這個url后,斷點就會收到調用,就可以debug調試項目了。
4、java命令啟動項目,使用-jar myApp.jar與主類名啟動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
解析: 服務器啟動java項目,可以啟動jar包或者尋找主類名啟動。
這個命令不一定非要使用 -jar xxx.jar
來指定啟動的 JAR 包。是否使用 -jar
選項取決于你啟動 Java 程序的方式。下面為你詳細分析不同情況:
情況一:使用主類名啟動
如果你像給出的命令 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 MyApp
這樣,直接指定主類名(MyApp
)來啟動 Java 程序,那么就不需要 -jar
選項。這種方式要求主類 MyApp
必須位于類路徑(classpath
)下,JVM 會在類路徑中找到這個類并執(zhí)行其 main
方法。
情況二:使用 JAR 包啟動
當你想通過 JAR 包來啟動 Java 程序時,就需要使用 -jar
選項。此時,你需要把 MyApp
替換為具體的 JAR 包名稱,例如:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 -jar myapp.jar
在這個命令里,-jar myapp.jar
告知 JVM 從 myapp.jar
這個 JAR 包中尋找主類并執(zhí)行。要注意的是,這個 JAR 包必須是可執(zhí)行的,也就是在其 MANIFEST.MF
文件中指定了主類。
總結
是否使用 -jar
選項要依據(jù)你的啟動需求來定:
- 若主類在類路徑中,可直接指定主類名啟動,無需
-jar
選項。 - 若要從 JAR 包啟動程序,則需使用
-jar
選項指定 JAR 包名稱。
到此這篇關于Java遠程debug調試的操作步驟的文章就介紹到這了,更多相關Java遠程debug調試內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot2.6.4集成swagger3.0遇到的坑及解決方法
這篇文章主要介紹了springboot2.6.4如何集成swagger3.0,在集成的過程中遇到很多問題,本文給大家分享四種問題及相應的解決方案,需要的朋友可以參考下2022-03-03spring?boot自動裝配之@ComponentScan注解用法詳解
@ComponentScan的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中,下面這篇文章主要給大家介紹了關于spring?boot自動裝配之@ComponentScan注解用法的相關資料,需要的朋友可以參考下2023-04-04