Java線上排錯---反編譯文件

強烈推薦一個大神的人工智能的教程:http://www.captainbed.net/zhanghan

【前言】

        有時候經常會遇到一些詭異的問題:明明在本地運行代碼沒有問題,服務器代碼和本地一樣,請求的參數和所連接的數據源

都一樣爲啥服務器上不行那?

        如果在測試環境我們可以進行遠程調試(參考《idea遠程調試》),但是線上應該如何排查?

        博主遇到很多次這種情況,最後確定都是由於服務器上代碼並沒有更新導致的,沒有更新原因有很多種比如:運維的部署腳

本有問題,執行錯誤腳本等等;那麼如何確定線上運行的代碼和本地運行有差異那?       

【反編譯神器】

        一、兩種反編譯方法:

               1、通過jd-gui查看class文件

               2、通過阿里雲的在線分析診斷工具Arthas的jad在線反編譯;

        二、兩種方法使用的詳細步驟

               1、準備工作:

                   (1)以SpringBoot工程爲例,代碼地址:https://github.com/dangnianchuntian/springboot

                   (2)以代碼中的LombokController 爲示例

                   (3)在Linux上對項目進行部署

                   (4)通過swagger對項目進行訪問

               2、通過jd-gui查看class文件,方法:

                   (1)登錄服務器,找到項目啓動jar包,並創建臨時目錄t

                   (2)將啓動jar包拷貝到臨時目錄t中,並進入臨時目錄t中

                   (3)使用unzip命令對jar包進行解壓

                   (4)進入到相關目錄中找到LombokController.class

                   (5)將LombokController.class導出到本地

                   (6)在本地用jd-gui打開文件(jd-gui綠色免安裝版地址:鏈接https://pan.baidu.com/s/1tj3iPQX5UW2yHffM6nicNQ 
提取碼:x8up)注:如果出現文件損壞或打開亂碼,請用方法二進行查看。

               3、通過阿里雲的在線分析診斷工具Arthas的jad在線反編譯,方法:

                   (1)官網下載Arthas https://alibaba.github.io/arthas/download.html

                   (2)在服務器中通過 java -jar arthas-boot.jar 啓動Arthas

                   (3)按序號(此處爲1)進入到項目中,並執行jad com.zhanghan.zhboot.controller.LombokController 查看內容

 

【總結】

        1、有了這兩種查看源碼方法,可以使我們快速定位到問題;

        2、遇到問題後不要鑽牛角尖,要從多個維度去思考問題。

發佈了290 篇原創文章 · 獲贊 2619 · 訪問量 535萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章