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包,也可以採用遠端除錯的方式進行審計。會更簡單快捷定位一些。