1. 程式人生 > >Java安全之jar包除錯技巧

Java安全之jar包除錯技巧

# Java安全之jar包除錯技巧 ## 除錯程式 首先還是建立一個工程,將jar包匯入進來 ### 除錯模式的引數 啟動中需要加入特定引數才能使用debug模式,並且需要開放除錯埠 JDK5-8: ```java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 ``` JDK9+: ```java -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 時,該值表示連線後的使用超時。 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210206161715428-1287208923.png) IDEA配置遠端除錯 ![](https://img2020.cnblogs.com/blog/1993669/202102/1993669-20210206161736131-63740567.png) 下斷點後能直接停下來。 ### class資料夾除錯 其實也比較簡單,只需要將他打包成一個jar包或者是war包,然後執行如上操作就好了。 ```bash cd src jar -cvf test.jar * ``` 總的來說除錯還是比較重要,其實不僅僅是jar包的除錯,比如還有Spring Boot(Spring Boot以jar包啟動除錯與上面類似)、Tomcat、weblogic這些。假設條件允許情況下,做一些審計時候,比如war包,也可以採用遠端除錯的方式進行審計。會更簡單快捷定位