1. 程式人生 > >eclipse 如何除錯jar包中的.class檔案

eclipse 如何除錯jar包中的.class檔案

        最近,換了個專案組,因為專案組中的基線程式碼(打包成jar的程式碼)看不到,用jd-gui可以反編譯,但是除錯遇到了麻煩。因為行數和程式碼不對應。弄了半個下午,試了很多方法,比如Eclipse Class Decompiler(但是部分jar包可以反編譯成java程式碼,有些不可以)。後來找到如下的方法可以解決除錯問題。

      轉載地址:http://www.blogjava.net/cnfree/archive/2012/10/30/390457.html

     閒暇之餘,寫了一個Eclipse下的Java反編譯外掛:Eclipse Class Decompiler,整合了目前最好的2個Java反編譯工具Jad和JD-Core,並且和Eclipse Class Viewer無縫整合,能夠很方便的使用本外掛檢視類庫原始碼,以及採用本外掛進行Debug除錯。

Eclipse Class Decompiler外掛更新站點:

http://feeling.sourceforge.net/update


直接使用Eclipse進行更新,支援Eclipse 3.x, 4.x,不依賴任何其他外掛,直接勾選更新外掛即可。

不少朋友問有沒有英文版的,實際上建立一個Eclipse的快捷方式,加上 -nl en_US 引數,所有的外掛都會自動顯示成英文,包括Eclipse Class Decompiler外掛。




下圖為Eclipse Class Decompiler的首選項頁面,可以選擇預設的反編譯器工具,並進行反編譯器的基本設定。預設的反編譯工具為JD-Core,JD-Core更為先進一些,支援泛型、Enum、註解等JDK1.5以後才有的新語法。


首選項配置選項:
1.重用快取程式碼:只會反編譯一次,以後每次開啟該類檔案,都顯示的是快取的反編譯程式碼。
2.忽略已存在的原始碼:若未選中,則檢視Class檔案是否已綁定了Java原始碼,如果已繫結,則顯示Java原始碼,如果未繫結,則反編譯Class檔案。若選中此項,則忽略已繫結的Java原始碼,顯示反編譯結果。
3.顯示反編譯器報告:顯示反編譯器反編譯後生成的資料報告及異常資訊。
4.使用Eclipse程式碼格式化工具:使用Eclipse格式化工具對反編譯結果重新格式化排版,反編譯整個Jar包時,此操作會消耗一些時間。
5.使用Eclipse成員排序:使用Eclipse成員排序對反編譯結果重新格式化排版,反編譯整個Jar包時,此操作會消耗大量時間。
6.以註釋方式輸出原始行號資訊:如果Class檔案包含原始行號資訊,則會將行號資訊以註釋的方式列印到反編譯結果中。
7.根據行號對齊原始碼以便於除錯:若選中該項,外掛會採用AST工具分析反編譯結果,並根據行號資訊調整程式碼順序,以便於Debug過程中的單步跟蹤除錯。
8.設定類反編譯檢視器作為預設的類檔案編輯器:預設為選中,將忽略Eclipse自帶的Class Viewer,每次Eclipse啟動後,預設使用本外掛提供的類檢視器開啟Class檔案。


外掛提供了系統選單,工具欄,當打開了外掛提供的類反編譯檢視器後,會啟用選單和工具欄選項,可以方便的進行首選項配置,切換反編譯工具重新反編譯,以及匯出反編譯結果。






類反編譯檢視器右鍵選單包含了Eclipse自帶類檢視器右鍵選單的全部選項,並增加了一個“匯出反編譯原始碼”選單項。


開啟專案路徑下的Class檔案,如果設定類反編譯檢視器為預設的檢視器,直接雙擊Class檔案即可,如果沒有設定為預設檢視器,可以使用右鍵選單進行檢視。




Eclipse Class Decompiler外掛也提供了反編譯整個Jar檔案或者Java包的反編譯。該操作支援Package Explorer對包顯示佈局的操作,如果是平鋪模式佈局,則匯出的原始碼不包含子包,如果是層級模式佈局,則匯出選中的包及其所有的子包。




Debug除錯:可以在首選項選中對齊行號進行單步跟蹤除錯,和普通的包含原始碼時的除錯操作完全一致,同樣的也可以設定斷點進行跟蹤。