熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

使用Eclipse調試Java程序的代碼介紹

2013-11-23 20:12:14  來源: Java開源技術 
    學習中需要反編譯Java的class文件我的開發工具是windows xp+Eclipse+MyEclipse我找到了jad反編譯工具在互聯網上找到了一些很有用的安裝步驟下面記錄了我的安裝過程
   
    一下載
   
    下載 jad 工具在官方網站沒有下載到在CSDN上可以下載
   
    下載插件 netsfjadclipse_jar
   
    二安裝
   
    安裝jad工具下載後解壓然後將解壓後的jadexe文件復制到%JAVA_HOME%\bin目錄下面(可以將jadexe放到任意位置只要記住其存放路徑就好下面要用到)
   
    安裝插件Eclipse中的插件安裝可以參考Eclipse使用技巧(三)Eclipse中插件的安裝
   
    我用復制的方法直接把netsfjadclipse_jar拷貝到%ECLIPSE_HOME%\plugins目錄下
   
    把使用link的方法拷貝到下面建立D:\Myplugins\netsfjadclipse_\eclipse\plugins的目錄結構將jadclipse_jar放到plugins目錄下面(注其中D:\Myplugins為你自己定義的一個專門放置插件的目錄)再在%ECLIPSE_HOME%\links目錄下面建立一個netsfjadclipse_link文件(該文件名隨便取)文件裡面內容為path=D:/Myplugins/netsfjadclipse_
   
    三配置
   
    啟動Eclipse打開Window>Preferences>Java>JadClipse如果找到了JadClipse即JadClipse插件被激活了設置jad路徑
   
    在Eclipse的Windows> Perference>General>Editors>File Associations中修改*class默認關聯的編輯器為JadClipse Class File Viewer
   
    四使用jad反編譯
   
    在DOS窗口中到class所在目錄直接運行 >jad DBclass將在該目錄中生成DBjad文件運行 >jad sjava DBclass將在該目錄中生成DBjava文件
   
    在Eclipse 工作台使用
   
    )把class目錄加入項目(這一步許多文檔都沒有寫到花了我很多時間)
   
    )項目〉屬性〉java buildpath〉add class folder (如 a)〉OK
   
    )a〉import〉General>File system>Browse>OK
   
    )雙擊class 文件出現可愛的java文件編譯成功
   
    五批量反編譯
   
    以下部分轉載 菠蘿大象的文章
   
    現在有人會說了這樣一個一個的看太麻煩了我需要一次把一個JAR包下的所有class文件反編譯成java源文件這樣的想法是可行的還是使用jad工具
   
    批量反編譯
   
    因為之前我們已經將jad加入到了%JAVA_HOME%\bin中只要配置了環境變量我們就可以在命令行中方便的使用在這裡大象還是以domjjar為例來說明具體的操作步驟
   
    解壓domjjar和jaxenbetajar為了方便我將JAR包解壓放到F盤根目錄在cmd中進入到F盤根路徑下輸入命令jad o r s java d src org/**/*class
   
    我解釋一下這些參數的含義
   
    o:覆蓋舊文件而且不用提示確認
   
    r:重新加載生成包結構
   
    s:定義輸出文件的擴展名jad為默認擴展名我們反編譯後當然是要java源文件了
   
    d:輸出文件的目錄src表示反編譯後的所有文件都放在src目錄下創建Java項目
   
    當Eclipse首次啟動時進入的是資源透視圖在這個透視圖中可以管理項目文件夾文件和其它資源按照Eclipse的說法這些面板叫做視圖一套完整的視圖叫做透視圖在資源透視圖中你可以使用左上方的視圖(導航視圖)導航和創建資源
   
    在Eclipse中做事之前如創建Java程序需創建一個Java項目創建Java項目的步驟如下
   
    在導航視圖上點擊右鍵在彈出的上下文菜單中選擇新建項目
   
    在新建項目對話框中Eclipse提供了項目選項Java插件開發等因此你想要創建一個Java項目在對話框左邊選擇Java;
   
    在對話框右邊選擇Java項目如果你還安裝了其它Java插件開發包在這裡也會一起列出來(如EJBServlet等)Eclipse默認安裝的JDT僅支持標准Java應用程序因此你必須選擇Java項目選項
   
    點擊下一步進入新建項目向導對話框
   
    首先給項目命一個名字因為是一個簡單的Hello world例子因此這裡我輸入Hello點擊下一步設置構建Java項目的設置選項對於這個項目你不需要做任何修改即可
   
    點擊完成
   
    Eclipse此時會提示你這種項目是和Java透視圖關聯的並詢問你是否切換到Java透視圖選擇是
   
    創建Java類
   
    當你創建好Java項目後就可以開始創建Java程序了盡管不是非得這麼做但這樣可以將你的Java類組織到包中這是一次很好的實踐通常使用域名做為包名這樣可以減少名字沖突的可能性如果你沒有注冊域名也可以使用任何方便的唯一的hoc名我在這裡使用orgeclipseguide項目名是hello因此包的全名就是orgeclipseguidehello
   
    按照下列步驟創建Java程序
   
    在項目上點擊右鍵選擇NewClass彈出新建Java類向導
   
    第一個字段區域源文件夾默認是項目的文件夾保持默認值
   
    在包字段區域輸入orgeclipseguidehello;
   
    在類名字段區域輸入HelloWorld;
   
    Which Method Stubs Would You Like to Create?區域下選中public static void main(String[] args)新建Java類的對話框如圖所示
   

  

                                        圖 使用新建Java類向導創建HelloWorld類
   
    點擊完成新建java類向導將會為程序包創建一系列目錄HelloWorldjava源文件將會放在這個包名下面
   
    自動創建的代碼包括一個main( )方法你可以向裡面添加任何功能如打印你的Hello world!為了使調試變得更有趣你需要添加一個循環打印的方法在Eclipse中修改自動生成的代碼如下
   
    public class HelloWorld {
   
    public static void main(String[] args) {say(Hello world!}public static void say(String msg) {for (int i = ; i < ; i++) {Systemoutprintln(msg)}}}

  運行Java程序
   
    現在你已經可以運行這個Java程序了在運行Java程序時需要考慮多個事情包括Java運行環境是否需要命令行參數如果不知一個類有main( )函數究竟該使用哪一個在Eclipse中正確啟動一個Java程序的方法是從Eclipse菜單中選擇運行à運行此時會彈出一個對話框讓你配置啟動選項在運行一個Java程序前你需要創建一個啟動配置或從現有配置中選擇一個
   
    對於大多數簡單的Java程序而言你不需要指定啟動配置因此你可以使用更簡單的方法啟動程序首先確保編輯器中HelloWorld源代碼是全部選中的然後
   
    從Eclipse菜單中選擇運行à以…運行àJava應用程序
   
    因為你已經對Java程序做出了修改Eclipse會提示你在運行Java程序前先保存一下點擊確定
   
    任務視圖切換到控制台視圖顯示程序輸出如圖所示
   

  

                                               圖 Eclipse控制台視圖顯示HelloWorld程序運行輸出
   
    你可能疑惑為什麼沒有單獨的步驟將java文件編譯成class文件這是因為Eclipse JDT包含了一個增量的編譯器來評估你輸入的Java程序代碼它可以高亮顯示語法錯誤和不完整的引用和其它Eclipse友好的特性一樣如果你覺得這個功能對你沒用你完全可以關閉它如果編譯成功class文件會在保存源文件時同步保存
   
    調試Java程序
   
    在Eclipse中交互式運行代碼是其最強大的特性之一使用JDT調試器你可以逐行執行你的Java程序檢查程序不同位置變量的值這個過程在定位代碼中的問題時非常有用
   
    為了准備調試你需要在代碼中設置一個斷點先以便讓調試器暫停執行允許你調試否則程序會從頭執行到尾你就沒有機會調試了為了設置一個斷點在編輯器左邊灰色邊緣雙擊這裡將say()函數位置設置為斷點此時將會顯示一個藍色的小點表示一個活動的斷點
   
    在調試器下運行程序和運行它非常類似Eclipse提供了兩個選項選擇使用全方位服務運行à調試菜單使用一個快捷配置如果默認選項正確也可以選擇運行à以…調試àJava應用程序在這裡我們使用後者
   
    確保編輯器中的HelloWorld代碼被全部選中了然後從主菜單中選擇運行à以…調試àJava應用程序Eclipse將會啟動程序切換到調試透視圖在斷點暫停執行如圖所示
   

  

                                                   圖 調試HelloWorld:在第一個斷點執行被暫停
   
    調試透視圖包括多個新的視圖都是用於調試使用的首先在左上方是調試視圖(不要和調試透視圖混淆了)它顯示了所有調用堆和當前所有線程的狀態包括所有已經執行完畢的線程程序運行到斷點位置時狀態顯示為暫停
   
    單步調試代碼
   
    調試視圖的標題欄是一個讓你可以控制Java程序執行的工具欄前面幾個按鈕和電子設備如CD播放器的控制按鈕風格非常類似允許你暫停繼續和終止程序這些按鈕讓你可以一行一步地執行程序代碼鼠標移動到每個按鈕上時都會顯示按鈕提示信息如跟蹤單步返回等
   
    如第二個按鈕跟蹤當前執行的程序代碼在編輯器中處於高亮狀態調用say()函數如果跟蹤的話就會進入這個函數內部點擊跟蹤後高亮的行是首先執行的行 for語句
   
    一般情況下你只想跟蹤你自己寫的類對於標准類和第三方類通常沒有什麼問題是不需要跟蹤的這時候可以使用過濾後跟蹤功能即Step With Filters選擇WindowPreferencesJavaDebugStep過濾器然後選擇列出的包和類多花點時間設置過濾器可以有效減輕調試難度當你使用普通的跟蹤調試功能時經常會遇到許多未知錯誤這時使用過濾跟蹤就能很好解決這一問題
   
    評估變量和表達式
   
    調試視圖的右邊是一個標簽視窗包含視圖在這裡你可以檢查和修改變量和斷點選擇變量標簽頁這個視圖顯示了當前范圍的變量及其值在進入for循環之前這個視圖僅包括say()函數的msg參數及其值單機單步或跟蹤按鈕進入for循環變量視圖將會顯示循環標志i及其值
   
    有時一個Java程序有許多變量但你僅對其中一個或幾個感興趣為了監視選擇的變量和表達式你可以將它們添加到表達式視圖中的監視列表中例如選擇一個變量i(在編輯器中雙擊它)點擊右鍵從彈出的右鍵菜單中選擇監視這個變量(及其值)就會顯示在表達式視圖中
   
    監視變量的一個好處是你可以檢查對象和它們的值的詳細信息並且可以修改它們的值返回到變量視圖展開msg變量顯示它的屬性它是一個char數組展開msg字符串可以顯示它的值例如雙擊H會提示你輸入一個新值如J
   
    在同一個標簽視窗中的是顯示視圖它允許你輸入任何允許的變量或包括這些變量的實例表達式選擇顯示視圖然後輸入
   
    msgcharAt(i)
   
    為了快速評估這個表達式你必須先選中它然後點擊第二個顯示視圖工具按鈕(顯示所選文本評估結果)它在顯示視圖中顯示結果通常最好點擊第一個工具按鈕(檢查所選文本評估結果)因為它添加表達式到表達式視圖中不管使用哪種方法當表達式中的變量發生變化時顯示的值都不回自動更新但在表達式視圖中你可以講表達式轉為監視表達式當你單步調試代碼時就會自動更新切換到表達式視圖注意檢查按鈕顯示下一個表達式點擊表達式然後從彈出的上下文菜單中選擇轉換成監視表達式下一個表達式圖標將會變成監視圖標
   
    我們還是回到單步調試代碼中你前面在調用Systemoutprintln()時留下了游標如果你想查看Systemoutprintln()的代碼你可以點擊跟蹤否則就點擊單步執行Systemoutprintln()函數開始下一個for循環
   
    在編輯器下方是連一個標簽視窗包括控制台視圖程序輸出就顯示在這裡如果你象前面說的那樣將H改為J了那這裡將會顯示Jello world!你也可以點擊單步執行直到循環終止如果你覺得這個過程太過冗長也可以點擊返回快速結束say()函數返回到main()函數或者點擊繼續按鈕讓Java程序運行到終點
   
    小結
   
    Eclipse最有用的特性之一就是它集成的調試器它可以交互式執行代碼通過設置斷點逐行執行代碼檢查變量和表達式的值等功能反應其強大的功能它是一款檢查和修復Java程序代碼問題的不可替代的工具


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28115.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.