Java安全之jar包除錯技巧

nice_0e3發表於2021-02-06

Java安全之jar包除錯技巧

除錯程式

首先還是建立一個工程,將jar包匯入進來

除錯模式的引數

啟動中需要加入特定引數才能使用debug模式,並且需要開放除錯埠

JDK5-8:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

JDK9+:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005

suspend=n表示的是啟動Java應用時是否立即進入除錯模式,suspend=y表示啟動即暫停,suspend=n則表示啟動時不需要暫停。address=*:5005表示的是Debug監聽的服務地址和埠,根據需求修改,上述配置會監聽到0.0.0.0

引數說明

(1) transport

指定執行的被除錯應用和除錯者之間的通訊協議,它由幾個可選值:

dt_socket:主要的方式,採用 socket 方式連線
dt_shmem:採用共享記憶體方式連線,僅支援 Windows 平臺(暫未驗證)
(2) server

當前應用作為除錯服務端還是客戶端,預設為 n。

如果你想將當前應用作為被除錯應用,設定該值為 y;如果你想將當前應用作為客戶端,作為除錯的發起者,設定該值為 n。

(3) suspend

當前應用啟動後,是否阻塞應用直到被連線,預設值為 y。

在大部分的應用場景,這個值為 n,即不需要應用阻塞等待連線。一個可能為 y 的應用場景是,你的程式在啟動時出現了一個故障,為了除錯,必須等到除錯方連線上來後程式再啟動。

(3) address

暴露的除錯連線埠,預設值為 8000。

(4) onthrow

當程式丟擲設定異常時,中斷除錯。

(5) onuncaught

當程式丟擲未捕獲異常時,是否中斷除錯,預設值為 n。

(6) launch

當除錯中斷時,執行的程式。

(7) timeout

該引數限定為 java -agentlib:jdwp=… 可用,單位為毫秒ms。

當 suspend = y 時,該值表示等待連線的超時;當 suspend = n 時,該值表示連線後的使用超時。

IDEA配置遠端除錯

下斷點後能直接停下來。

class資料夾除錯

其實也比較簡單,只需要將他打包成一個jar包或者是war包,然後執行如上操作就好了。

cd src
jar -cvf test.jar *

總的來說除錯還是比較重要,其實不僅僅是jar包的除錯,比如還有Spring Boot(Spring Boot以jar包啟動除錯與上面類似)、Tomcat、weblogic這些。假設條件允許情況下,做一些審計時候,比如war包,也可以採用遠端除錯的方式進行審計。會更簡單快捷定位一些。

相關文章