Eclipse學習探討—-Eclipse調試方法

來源:互聯網
上載者:User

調試是程式員無法迴避的工作。調試方法有許多種,但歸根結底,就是找到引發錯誤的代碼。舉例來說,在 Linux 應用程式中,分段故障被認為是最常見的錯誤之一。當程式嘗試訪問未分配給它的記憶體並因為分段違例而終止時,將產生這種錯誤。要修正這種錯誤,您需要找到引發該行為的那行代碼。一旦找到有問題的程式碼,這對於知道引發錯誤的上下文及其相關的值、變數和方法也是有所協助的。使用調試器將使尋找這些資訊變得相當簡單。

Eclipse 調試器及 Debug 視圖

Eclipse 平台的特色在於內建了 Java 調試器,該調試器提供所有標準調試功能,包括進行逐步執行、設定斷點和值、檢查變數和值以及暫掛和恢複線程的能力。此外,您還可以調試在遠程機器上啟動並執行應用程式。Eclipse 平台主要是一個 Java 開發環境,但其體繫結構同時也向其它程式設計語言開放。如以下您將看到的,同一個 Eclipse 的 Debug 視圖也可用於 C 和 C++ 程式設計語言。

Eclipse 平台工作台(Eclipse Platform Workbench)及其工具是基於 Java 開發工具(JDT)組件所構建的。這些組件向 Eclipse 提供以下功能:

  • 專案管理工具
  • 透視圖和視圖
  • 構建器、編輯器、搜尋和構建功能
  • 調試器

Eclipse 調試器本身是作為 Eclipse 二進位檔案中包含的標準外掛程式而存在的。Eclipse 還有一個特別的 Debug 視圖,允許您在工作台中管理程式的調試和運行。它為調試中的每個目標顯示其暫掛線程的堆疊框架。程式中的各個線程以作為樹的節點出現,而 Debug 視圖則顯示運行中的各目標的進程。如果暫掛一個線程,則其堆疊框架顯示為子項目。

在您開始使用 Eclipse 調試器之前,假定您已經安裝了適當的 Java SDK/JRE(我推薦您使用 Java VM 1.4)和 Eclipse 平台 SDK 2.0/2.1,且兩者都工作正常。一般來說,先使用 Eclipse 樣本來測試一下調試選項是一個好主意。如果您要開發和調試 C/C++ 項目,您還需要得到並安裝 C/C++ 開發工具(C/C++ Development Tool,CDT)。有關 Java SDK/JRE、Eclipse 平台和樣本以及 CDT 的連結,請參閱本文後面的 參考資料。 圖 1顯示了 Debug 使用者介面的常規視圖。

圖 1. Eclipse Debug 視圖使用者介面的常規視圖

 



回頁首

調試 Java

在您能調試您的項目之前,需要先完整地編譯和運行代碼。您首先需要為您的應用程式建立回合組態並確認其正常啟動。之後,您需要使用 Run > Debug...菜單,以同樣的方式設定調試配置。您還需要選擇作為主 Java 類的由調試器使用的類(也請參閱 圖 2)。對一個項目,您希望有幾種調試配置就可以有幾種。當調試器啟動後(通過 Run > Debug...),會在一個新視窗開啟它,您可以準備開始調試。

圖 2. 在調試配置中設定項目的主 Java 類

以下是最常見的 Eclipse 調試操作的樣本指示資訊:

設定斷點

當您啟動應用程式以進行調試時,Eclipse 自動切換到 Debug 透視圖。無庸置疑,最常見的調試過程就是設定斷點,以允許檢查在條件陳述式和迴圈中的變數和值。要在 Java 透視圖的 Package Explorer 視圖中設定斷點,雙擊所選的原始碼檔案,在編輯器中開啟它。遍曆全部代碼,將游標放置在含有可疑代碼的那一行的標記欄上(在編輯器地區的左側)。雙擊以設定斷點(也請參閱 圖 3)。

圖 3. 在編輯器左側邊緣可看到兩個斷點標記

現在通過 Run > Debug...菜單啟動偵錯工作階段。有一點很重要,不要把數條語句放在同一行,因為您不能在同一行的多條語句上單步跳過或設定行斷點(也請參閱 圖 4)。

圖 4. 視圖通過左側邊緣的箭頭指出當前正在執行的行

條件斷點

一旦您找到出錯的地方,您會想要瞭解在崩潰前程式在幹些什麼。完成該工作的一種方法是逐步執行程式中的每條語句,一次一句,直到到達出問題的地方。有時候更好的方法是僅運行某段代碼並在出問題的地方終止其執行,這樣就可以檢查該位置上的資料。要實現這一點,可能要聲明每當運算式的值更改時就被觸發的條件斷點(請參閱 圖 5)。此外,在輸入條件運算式時還可以使用代碼輔助。

圖 5. 設定條件斷點觸發器

對錶達式求值

要在 Debug 透視圖的編輯器中求運算式的值,選中設定有斷點的一整行,並在操作功能表中選擇 Inspect 選項(請參閱 圖 6)。運算式是在當前堆疊框架的上下文中求值的,其結果顯示在 Display 視窗的 Expressions 視圖中。

圖 6. 用 Inspect 選項求運算式的值

查看變數

Variables 視圖(在 Display 視窗中)顯示了選中的堆疊框架中的變數值(請參閱 圖 7)。要查看所請求的變數,只需展開 Variables 視圖中的樹直到您看到所請求的元素為止。您也可以在 Debug 視圖中逐步執行代碼的同時,在 Variables 視圖中查看變數。

圖 7. 在 Display 視窗中查看變數

當調試器在斷點上停止時,您可以通過在 Run > Debug...菜單上選擇 Step Over 選項來繼續調試器會話(請參閱 圖 8)。這將單步跳過反白的程式碼並執行同一個方法中的下一行(或者它在調用當前方法的方法中繼續)。作為最後一步的結果而發生更改的變數用顏色反白(預設值是紅色),所用顏色可在“Changed Variable Value Color”喜好設定(由 Debug Variable Views 指定)中指定。

圖 8. Run... 菜單中的調試器命令

要在 Debug 視圖中暫掛線程的執行,選擇一個運行中的線程並單擊 Debug 視圖工具列中的 Suspend按鈕。會顯示該線程的當前呼叫堆疊,並且在 Debug 透視圖的編輯器中反白當前執行的行。

暫掛線程時,將游標放置到 Java 編輯器中的變數上,該變數的值顯示在一個小懸浮視窗中。同樣,該線程的頂部堆疊框架被自動選中,該堆疊框架中的可視變數顯示在 Variables 視圖中。可以通過在 Variables 視圖中單擊變數名來檢查相應的變數。

 



回頁首

熱交換錯誤修正:即時代碼修正

如果您啟動並執行是 JVM 1.4(JAVA 虛擬機器,Java Virtual Machine),Eclipse 2.0.2 和 2.1 提供一個叫做熱交換錯誤修正(Hotswap Bug Fixing)的新功能(無法用於 JVM 1.3 或更低版本 - 也請參閱 圖 9)。它允許在調試器會話過程中更改原始碼,這要比“退出應用程式,更改原始碼,重新編譯,再啟動另一個偵錯工作階段”的一系列步驟好多了。要使用該功能,只需在編輯器中更改代碼並恢複調試。由於 JVM 1.4 與 Java 平台調試器體繫結構(Java Platform Debugger Architecture,JPDA)相容,所以能使用該功能。JPDA 實現了在運行中的應用程式中用經過修改的代碼進行替換的能力。當然,當啟動您的應用程式或找到出錯點需要花費很長時間的時候,該功能極其有用。

圖 9. 熱交換錯誤修正功能不能在 JVM 1.3 及更低版本中使用

如果您完成調試時程式還沒有被完整地執行過,請在 Debug 視圖中的操作功能表中選擇 Terminate 選項。一個常見的錯誤是您在調試器會話中使用了 Debug 或 Run 而不是 Resume。這樣將會啟動另一個調試器會話,而不是繼續當前的會話。

 



回頁首

遠端偵錯

Eclipse 調試器提供了一個有趣的選項,可用於調試遠程應用程式。它可以串連到一個運行 Java 應用程式的遠程 VM 上,並將其串連到內部調試器上。處理遠端偵錯會話非常類似於本地調試。不過,遠端偵錯配置要求對 Run > Debug...視窗進行不同的設定。您首先要選擇左側視圖中的 Remote Java Application 項,單擊 New按鈕。這樣就建立了一個新的遠程啟動配置,並顯示三個選項卡:Connect、Source 和 Common。

在 Connect 選項卡的 Project 域中,選擇用作啟動喜好設定的項目(用於尋找原始碼)。在 Connect 選項卡的 Host 域中,輸入運行 Java 程式的遠程主機的 IP 位址或網域名稱。在 Connect 選項卡的 Port 域中,輸入遠程 VM 接受串連的連接埠。一般來說,該連接埠是在遠程 VM 啟動時指定的。當您想讓調試器確定 Terminate 命令在遠端工作階段中是否可用,可以選擇 Allow termination of remote VM 選項。如果您希望能終止所串連的 VM,則選擇該選項。現在當您選擇 Debug 選項時,調試器將嘗試按指定的地址和連接埠串連遠程 VM,並在 Debug 視圖中顯示結果。

如果啟動器無法串連至指定位置上的 VM,將顯示錯誤訊息。一般來說,遠端偵錯功能的可用性完全取決於遠程主機上啟動並執行 Java VM(虛擬機器,Virtual Machine)。 圖 10顯示了遠端偵錯會話的串連屬性的設定。

圖 10. 設定遠端偵錯會話的串連屬性

 



回頁首

調試其它語言

Java 是 Eclipse 平台的主語言。然而,Eclipse 平台同時也是一個可支援許多其它語言的可擴充平台,而其中最重要的就是支援 C/C++(因為其流行性)。Eclipse 通過用 C/C++ 開發工具(CDT)支援 C/C++。請參閱 參考資料以擷取相關連結。CDT 通過調試 C/C++ 代碼的功能擴充了標準的 Eclipse Debug 視圖,同時 CDT Debug 視圖允許您在工作台中管理 C/C++ 項目的調試。CDT 不包含其內部調試器,但它向必須可在本地使用的 GNU GDB 調試器提供了一個前端。

下載並安裝了 CDT 之後,只需切換到 Debug 視圖,您就可以開始調試當前的 C/C++ 項目了(請參閱 參考資料,以擷取一篇介紹如何安裝 CDT 的文章的連結)。這樣您可以設定(並在執行過程中任何時候更改)代碼中的斷點,並且跟蹤變數和寄存器。Eclipse 調試器顯示您調試中各個目標的暫掛線程的堆疊框架。程式中的各個線程作為樹的節點出現。它顯示了運行中各目標的進程。請記住當 GNU GDB 調試一個帶有偵錯符號連結的程式時,它最有效。這是在編譯過程中由命令列參數 -g 來實現的。需要更多的資訊請使用 -ggdb 開關,該參數包含有特定於 GNU GDB 的偵錯符號。

如果您要調試 servlet,使用 Sysdeo Eclipse Tomcat Launcher。該外掛程式使您能夠管理 Tomcat 4.x/3.3 servlet 容器(通過建立和匯入一個 Tomcat WAR 項目)。它同時在一個內部 Java Eclipse 調試器中註冊一個 Tomcat 進程,這樣您就能方便地調試 Tomcat 應用程式了。還有其它幾個 Eclipse 外掛程式,使我們能夠對 servlet 使用內部 Eclipse 調試器,比如 Cactus 的 Eclipse 外掛程式,Resin 外掛程式和 X-Parrots ServletExec 外掛程式。在下面的 參考資料中可獲得這些外掛程式的連結。

 



回頁首

結束語

Eclipse 平台提供了內建的 Java 調試器,該調試器具有標準調試功能,包括進行逐步執行、設定斷點和值、檢查變數和值以及暫掛和恢複線程的能力。它還可以用於調試在遠程機器上啟動並執行應用程式。Eclipse 平台主要是一個 Java 開發環境,但是同一個 Eclipse 的 Debug 視圖也可用於 C 和 C++ 程式設計語言。

參考資料

  • 您可以參閱本文在 developerWorks 全球網站上的 英文原文.
  • 在 eclipse.org加入 Eclipse 平台社區並下載該平台。Eclipse 平台原始碼是通過普通公用許可證(Common Public License)進行許可的。您還能在 eclipse.org 找到 Eclipse 項目的術語詞彙表及描述,以及技術文章和新聞群組。Eclipse 平台白皮書詳細描述了 Eclipse 的主要組件和功能。

  • 在 eclipse.org 下載 C/C++ 開發工具。

  • 以下是另外一些用於 servlet 的 Eclipse 外掛程式的連結:
    • Cactus 的 Eclipse 外掛程式
    • Resin 外掛程式
  • 查看 Eclipse 外掛程式的分類註冊表。

  • 以下文章可以協助您開始學慣用 Eclipse 進行調試:
    • 請參閱由 Greg Adams 和 Marc Erickson 撰寫的 developerWorks文章“ Working the Eclipse Platform”,介紹了 Eclipse 平台及其工作方式。
    • 要著手使用 Eclipse 平台開發應用程式,請參閱由 David Gallardo 撰寫的 developerWorks文章“ Getting started with the Eclipse Platform”。
    • 要學習 Eclipse 中的啟動架構(Launching Framework),請參閱 eclipse.org 文章“ We Have Lift-off: The Launching Framework in Eclipse”。
    • 要擷取關於產品構建器和特性的更多資訊,請參閱 eclipse.org 文章“ Project Builders and Natures”。
  • 如果您是一名開發人員,且希望參與和實現不同 Eclipse 組件相關的討論,請訪問為該項目中各組件所建立的 開發人員郵件清單。

  • developerWorks尋找更多為 Eclipse 使用者準備的參考資料。

關於作者

 

Paul Leszek,是 Studio B的一名作者,同時也是專長於 Linux/Win/Mac OS 系統體繫結構和管理的獨立軟體顧問。在許多作業系統、程式設計語言和網路通訊協定,尤其是 Lotus Domino 和 DB2 方面,他都有經驗。Paul 同時還是“LinuxWorld”系列文章的作者,以及波蘭語版“PC World”的 Linux 專欄作家。Paul 和他的妻子及他們可愛的小女兒一起住在華沙。Paul 歡迎您的問題和意見;可通過 pawel.leszek@ipgate.pl直接發電子郵件給作者。

引用自:http://www.ibm.com/developerworks/cn/linux/opensource/os-ecbug/ 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.