Table of contents
1 何謂 remote debugging
Debug Java 程式或者 JavaScript 程式大家都試過,但係 Java 既其中一個強大之處,就係其實 JVM 係可以畀我地利用 Java Debug Wire Protocol 去做到 remote debugging,亦即係個 JVM 唔需要喺自己部機度運行都可以做到 debugging。
2 好處
呢個功能最大既好處係可以畀我地 debug 唔係喺 local deploy 既 Java 程式。咁當我地遇到問題既時候,就唔需要為左做到 local run 而 setup local 既所有野,包括 database data、上下游既 applications、程式配置(Spring profile、application properties、Java program arguments、Java VM arguments、environment variables 等等),可以利用 remote deployment(e.g. UAT)既配置以及 database data。
3 動手設置
3.1 Eclipse 設置 breakpoint
- 喺 Eclipse 裡面打開想要 debug 既 Java class。
- Double-click 想 debugger 暫停既 line number,會見到有個小藍點顯示左喺左邊。
- 如果去 Debug perspective,會見到 Breakpoints view 裡面有我地所有既 breakpoints。
3.2 啟動 Java app
無論係一般 Java 程式又或者係 Spring Boot 程式都一樣,我地只需要執行 java
既時候加入 -agentlib
argument 就得:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 App.jar
之後就會見到一句:
Listening for transport dt_socket at address: 8000
如果我地想等到 Eclipse 連接左個 agent 之後先畀個 Java 程式開始執行,可以用 suspend=y
:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 App.jar
3.3 Debug Java app
喺 Eclipse 裡面新增一個 Debug configuration:
- 撳 toolbar 上面 Debug 掣(蜘蛛 icon)右邊既倒三角。
- 撳
Debug configurations...
。
- Right-click 左邊個 list 上面既
Remote Java Application
> New Configuration
。
- 撳落新增既配置,揀岩要 debug 既 project,Connection Type 用默認既
Standard (Socket Attach)
,確保 host 以及 port 係對應返個程式運行既 host 以及我地啟動 Java app 果陣句 command 裡面畀 port。
- 撳 Debug 去開始連接個 Java 程式。
- 如果我地去 Debug perspective,就會見到有個 Remote Java application 既 debug session。
- 如果個 Java 程式執行到我地落左 breakpoint 既 code lines,個 Java application 就會停落黎,而 Eclipse 個 Debug perspective 就會顯示相關既資訊出黎。
4 參考資料