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