使用 Eclipse 調試 Java 程式的技巧【9】

來源:互聯網
上載者:User

標籤:

若有不正之處,請多多諒解並歡迎批評指正,不甚感激。
請尊重作者勞動成果:

本文原創pipi-changing
本文原創出處:http://www.cnblogs.com/pipi-changing/

本文著作權歸作者和部落格園共有,未經作者同意必須保留此段聲明,
且在文章頁面明顯位置給出原文串連 ,否則保留追究法律責任的權利。

 

 

 

 

使用 Eclipse 調試 Java 程式的技巧 

不要調試太多

  只調試你覺得有問題的代碼或者一部分一部分功能的調試;

 

 

【 斷點視圖 : 條件斷點】

 

  如果你只對應用中的某部分感興趣的話,這個功能非常有用。例如,如果你要在第13次迴圈的時候檢查程

序,或者在一個抽象父類中調試某些功能,而你只關注其 中一個具體的實現。你可以在斷點視圖中設定條件,

或者通過代碼旁邊的藍色斷點標記的右鍵菜單("Breakpoint Properties")設定。你可以在條件程式碼片段為

true的時候暫停程式,或者當程式碼片段的值改變的時候掛起程式。


 

顧名思義就是一個有一定條件的斷點,只有滿足了使用者佈建的條件,代碼才會在運行到斷點處時停止。

在斷點處點擊滑鼠右鍵,選擇最後一個"Breakpoint Properties"

 

斷點的屬性介面及各個選項的意思如,

 

 

 

 【變數視圖:展示邏輯結構】

 

 

   如果你需要在變數視圖查看一個Map對象或者List對象的值,對於eclipse的預設設定,一般並不是那麼容易。假設,你使用的是

HashMap,你 需要點擊遍曆各個實體條目,並面臨各種HashMap的實現細節。但是,在變數視圖上面有一個叫做“Show Logical

Structure”的按鈕。它非常有用,尤其當你的對象的toString()方法所展示的資訊並不友好的時候。

未開啟“Show Logical Structure” 

 

 

 

 

 開啟“Show Logical Structure” 

 

 

 

【變數視圖:更改變數值】

 

    當你需要稍微更改輸入資訊的時候,不需要重新開始偵錯工作階段,只需在一個表格中輸入新的資訊,你可以在調試階段直接修改你

的變數的值。有些時候,你可以節省一些時間,你可以通過這個功能,更加簡單的類比一些怪異的情況。



 

 

Display視圖】 

 

   你知道“Display視圖”嗎?你可以在調試過程中,通過“Window” -> “Show View” -> “Display”來啟用它。現在,你的eclipse

應該是一個空白的新視圖。你可以使用這個視圖,輸入或者演算一些新的代碼。這些代碼在當前的調試位 置的上下文環境中被執行,這

意味著,你可以使用所有變數甚至是內容助手。要執行你的代碼的話,只需標記它,並使用右鍵菜單或者CTRL+U(執行)或

者 CTRL+SHIFT+I (檢查).

 

 

 

【導航: Drop to Frame】 

 

  我想任何人都知道“Step Into”, “Step over”,而且可能也知道“Step return”. 這些是調試時的基本導航功能。我想提兩個我非常

喜歡的導航的進階方法。第一個是“Drop to Frame”. 使用這個特性你可以及時回退 ,  你可以直接回退到運行過的java堆疊框架中某一

幀。當我調試時,一不小心錯過了某個關注的程式碼時,我常常用這個回退一幀。使用“Drop to Frame”這個特性我可以簡單的重新運

行某幀代碼。 

 

 

 

【導航: Step into Selection】

 

   第二個是“Step into Selection”. 要使用它,你只需要按 Ctrl+Alt 同時點擊一個你想運行到的方法名。非常方便,非常快速。相

比“Step Into”這個非常方便,想想你像跟蹤 進一個有很多參數的函數,如果用“Step Into”你必須進入,退出每個參數計算過程,才

能進入到你真正想進的函數。“Run to line”也是很棒的特性。只需要把游標放在你想運行到的哪一行前面,然後按“CTRL+R”就可以

了。

 

 

 

導航器:使用鍵盤】 

 

 

F5——進入:移動到下一個步驟,如果當前行有一個方法調用,該控制項將會跳轉到被呼叫者法的第一行執行。

F6——跳出:移動到下一行。如果在當前行有方法調用,那麼會直接移動到下一行執行。不會進入被呼叫者法體

    裡面。

F7——返回:從當前方法中跳出,繼續往下執行。

F8——移動到下一個斷點處執行。

全域 單步跳入選擇 Ctrl+F5 

全域 調試上次啟動 F11 

全域 使用過濾器逐步執行 Shift+F5 

全域 添加/去除斷點 Ctrl+Shift+B 

全域 顯示 Ctrl+D 

全域 運行上次啟動 Ctrl+F11 

全域 運行至行 Ctrl+R 

全域 執行 Ctrl+U

 

  • Ctrl+Shift+B – “添加斷點”
  • Ctrl+Shift+I – “檢查”

 

 

 

【斷點視圖:Watchpoints】 

 

   如果改變這個變數會有什麼結果?有時候建立一個watchpoint對於調試會非常有用。調試器會停止,不管這

個被觀察的欄位是被修改還是被讀取 - 你可以自己來配置決定。你只需雙擊一個欄位,然後你就可以在斷點視圖

中看到watchpoint,並且可以編輯它的屬性。你甚至可以設定一個訪問次數,這意味 著當變數到達訪問次數數量的時候,調試器會停止。這對於普通的斷點也適用。

 

 

 

 

 

【友好的可讀的對象】 

 

   變數視圖是使用對象的toString方法來實現對應的值。因為這個原因,如果提供友好的toString方法實現,

對調試來說會非常有用。在javadoc中關於java.lang.Object的預設toString實現,也是這樣推薦的:

   “返回一個表示該對象的字串。通常<code>toString</code>方法返回這麼一個字串,“字面表示”該對象。返回結果必須是一個簡潔卻富含可表示該對象的資訊,並且友好可讀取。我們推薦所有的子類都覆蓋這個方法。”

 

你可以參考commons-lang中的 ToStringBuilder。它提供一些功能來編寫 (引用自javadoc ) "良好並連貫” 的toString方法。

 

預設的ToString

 

 

 預設的ToStringBuilder例子

 

 

 ToStringBuilder例子 – 多行文本風格

 

  如果你不能修改toString實現,例如你現在使用架構或者一個外部的API,你可以有另外一個選擇,在

Eclipse中建立一個“Detail Formatter”。你需要在變數視圖中右擊一個對象,並點擊“New Detail

Formatter…”。然後你就可以輸入一些代碼,用於展現這個對象。

 

 

 

【在Main函數裡面停止執行】

 

  在運行/調試設定中,編輯配置對話方塊中有“Main”這個選項卡,我們可以勾選“Stop in main”這個複選框。如

果選中,那麼在調試一個基於main方法的Java程式時,程式會在main方法第一行位置便停止執行。

 

 

 

【分布過濾】 

 

  當我們進入(F5)方法的時候,我們還可以訪問其外部庫(比如java.*),我們可能不需要這個庫,就可

以在Perference索引標籤頁面面添加一個過濾器來排除這個包。

 

 

 【遠端偵錯】

 

 

用於調試不在本機上的程式,有兩種方式,

1、本機作為用戶端

2、本機作為服務端

使用遠端偵錯的前提是伺服器端和用戶端的代碼是一致的。

本機作為用戶端

本機作用戶端比較常用,需要在遠端的伺服器上的java程式在啟動時開啟遠端偵錯開關,

伺服器端需要加上虛擬機器參數

1.5以前版本(1.5以後也可用):

【-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 】

1.5及以上版本:【 -agentlib:jdwp=transport=dt_socket,server=y,address=8000】

F:\Study\eclipsepro\screensnap>java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar screensnap3.jar

串連時遠程伺服器時,需要在Eclipse中建立一個遠端偵錯程式

 

 

這裡有一個小地方需注意,串連上的時候貌似不能自動切換到Debug視圖,不要以為原生偵錯工具沒有串連到伺服器端。

本機作為服務端

同本機作為用戶端相比,只需要修改一下“Connection Type”

 

 這時Eclipse會進入到等待串連的狀態

 

 

串連程式使用如下參數即可串連本機伺服器,IP地址請用實現IP替換~~

【-agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000】

F:\Study\eclipsepro\screensnap>java -agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000 -jar screensnap3.jar

遠端偵錯時本地的代碼修改可同步到遠程,但不會寫到遠端檔案裡,也就是說本地修改會在下次啟動遠程程式

時就沒有了,不會影響到下次使用時的遠程代碼。

 

 

 

使用 Eclipse 調試 Java 程式的技巧【9】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.