➜ Old React website
Chung Cheuk Hang MichaelJava Web Developer
Spring Cloud Config——使用獨立既 Git 配置 repoSpring JSON 變 XML response 問題

Remote debug Java 程式

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

  1. 喺 Eclipse 裡面打開想要 debug 既 Java class。
  2. Double-click 想 debugger 暫停既 line number,會見到有個小藍點顯示左喺左邊。
  3. 如果去 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:
  1. 撳 toolbar 上面 Debug 掣(蜘蛛 icon)右邊既倒三角。
  2. Debug configurations...
  3. Right-click 左邊個 list 上面既 Remote Java Application > New Configuration
  4. 撳落新增既配置,揀岩要 debug 既 project,Connection Type 用默認既 Standard (Socket Attach),確保 host 以及 port 係對應返個程式運行既 host 以及我地啟動 Java app 果陣句 command 裡面畀 port。
  5. 撳 Debug 去開始連接個 Java 程式。
  6. 如果我地去 Debug perspective,就會見到有個 Remote Java application 既 debug session。
  7. 如果個 Java 程式執行到我地落左 breakpoint 既 code lines,個 Java application 就會停落黎,而 Eclipse 個 Debug perspective 就會顯示相關既資訊出黎。

4 參考資料