翻譯|使用教程|編輯:吳園園|2020-05-28 14:36:37.007|閱讀 293 次
概述:調試器是功能強大且用途廣泛的工具,可在受控環境中執行程序。使用調試器,您可以查看應用程序的內部狀態,查找錯誤,理解代碼以及執行許多其他操作。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
IntelliJ IDEA是Java語言開發的集成環境,IntelliJ在業界被公認為優秀的Java開發工具之一,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創新的GUI設計等方面的功能可以說是超常的。IntelliJ IDEA 現已加入在線訂購,點擊此處了解價格詳情>>
如果您曾經System.out.println()調試過代碼,那么這篇文章是必讀的。
調試器是一種特殊的工具,可用于在嚴格控制的環境中執行代碼。它使您可以查看和分析應用程序的內部狀態,并發現并修復可能隱藏在代碼深處的錯誤。
使用調試器,您還可以更改和測試代碼的行為而無需修改源代碼,并且還可以執行許多其他有趣的事情。讓我們邁入調試世界的第一步,看看該工具的功能。
點擊查看:IntelliJ IDEA(2020)中的調試器基礎視頻教程
在調試模式下執行代碼
為控制臺應用程序啟動調試器很簡單。讓我們使用以下示例代碼進行演示:
package com.jetbrains; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class CoordinatesCopy { public static void main(String[] args) throws IOException { List<Point> lineCoordinates = createCoordinateList(); outputValues(lineCoordinates); Point p = new Point(13, 30); removeValue(lineCoordinates, p); outputValues(lineCoordinates); } private static void outputValues(List<Point> lineCoordinates) { System.out.println("Output values..."); for (Point p : lineCoordinates) { System.out.println(p); } } private static void removeValue(List<Point> lineCoordinates, Point p) { lineCoordinates.remove(p); } private static List<Point> createCoordinateList() { ArrayList<Point> list = new ArrayList<>(); list.add(new Point(12, 20)); list.add(new Point(13, 30)); return list; } }
有多種啟動調試器的方法:
1、您可以單擊裝訂線區域中的“運行”圖標,然后選擇“調試”選項。
2、您可以使用Alt + Enter調用類或main方法上的上下文操作,然后選擇Debug操作。
3、您也可以從“運行”菜單或按Shift F9來啟動它。
您可以編輯運行配置以添加虛擬機選項或將參數傳遞給程序。
暫停,恢復,重新啟動或停止調試器
如果您的應用程序似乎無響應,則可以暫停程序以分析代碼的阻塞位置。讓我們修改上一節中的main方法,如下所示:
public static void main(String[] args) throws IOException { List<Point> lineCoordinates = createCoordinateList(); outputValues(lineCoordinates); Point p = new Point(13, 30); int y = System.in.read(); // execution pauses here removeValue(lineCoordinates, p); outputValues(lineCoordinates); }
在調試模式下執行您的應用程序。如果不輸入值,則您的應用程序似乎無響應。此代碼可能很容易理解,但并非所有代碼庫都這么簡單。
在“調試”窗口中,單擊“ 暫停程序”,然后編輯器窗口將顯示您的應用程序當前正在執行或已阻止的類和方法。在此示例中,您可以看到該代碼已被用戶輸入阻止,從而在編輯器中顯示了相關的類和方法。您還可以查看調用堆棧。通過單擊調用堆棧中的方法調用,可以在編輯器窗口中查看相應的類和方法。
您可以通過單擊“ 恢復程序”或使用快捷鍵F9 來恢復程序執行。要以調試模式重新啟動程序,請選擇Rerun。您可以隨時使用“ 停止”圖標停止調試程序。
注意,在這種情況下,我沒有設置任何斷點。
斷點
斷點將停止程序的執行,以便您可以分析代碼的狀態。
要在一行代碼上設置斷點,請在裝訂線區域中單擊,或使用快捷鍵Ctrl + F8(Win / Linux)或?F8(macOS)。如果不想每次到達斷點都停止執行,可以為斷點定義一個條件。例如,讓我們在方法outputValues()中在輸出變量值的代碼行中添加一個斷點,p并定義一個條件,以y在引用變量的字段p等于時停止執行代碼30。
您也可以將斷點拖放到裝訂線中,然后將其移至另一行代碼。默認情況下,單擊裝訂線中的斷點圖標將其刪除(您可以在“設置” |“首選項”中修改默認行為)。但是,如果您已經為斷點定義了條件或其他參數,則可能更希望在單擊斷點時將其禁用而不是刪除。您可以通過右鍵單擊斷點圖標并選擇“禁用”來執行此操作。勾號表示該行代碼有信息,而叉號表示此斷點上沒有信息。
要檢查斷點及其條件如何工作,請執行此博客中包含的示例代碼(在調試模式下)。你會看到,當字段的值這一計劃將暫停y變量p是30。
斷點還有更多。您可以右鍵單擊裝訂線中的斷點圖標,然后單擊“更多”。在打開的對話框中,您可以修改斷點,以使其不暫停程序執行,而在到達時記錄表達式。讓我們記錄該類的xand y字段的值,Point然后重新運行我們的代碼。現在,代碼執行不會在斷點處停止–而是將我們定義的表達式記錄到控制臺。
調試窗口
當您的應用程序在斷點處暫停執行時,調試窗口將顯示重要信息,例如框架,線程,控制臺窗口,步驟操作圖標,變量窗格等:
如果錯誤地關閉了調試窗口,則始終可以使用快捷鍵Alt + 5(Win / Linux)或?5(macOS)重新打開它。與往常一樣,有多種方法可以訪問“調試窗口”。您還可以使用“在任何地方搜索”功能(快捷方式:Shift + Shift),使用“ 查找操作”(對于Win / Linux快捷方式為Ctrl + Shift + A,對于macOS為?A)以及通過搜索“調試”來訪問它。 。
您的應用程序在調試模式下完成執行后,您還可以查看調試窗口。您不僅可以使用調試窗口在調試模式下瀏覽代碼,還可以使用它來查看程序中的所有斷點,使其靜音并進一步修改它們的功能。
在繼續進行用于調試應用程序的步驟操作之前,讓我們了解本示例中使用的示例應用程序。
示例應用程序概述
本文章中使用的代碼很簡單。該方法createCoOrdinateList()創建Point該類的兩個實例,并將它們添加到中ArrayList。該Point班有兩個字段,x并且y,和getter和setter方法。該outputValues()方法將傳遞的列表項輸出到控制臺。下一行代碼創建一個Point實例,該removeValue()方法嘗試將其從lineCoordinates列表中刪除。
執行此代碼時,即使在將Pointwith x和yvalues 13并30添加到列表中時,您也會在輸出中看到,當創建另一個具有相同值的實例以將其刪除時,它不會成功。讓我們調試代碼。
要調試代碼,您需要了解可用于遍歷代碼以查找錯誤的各種步驟操作。
步驟動作
有多種方法可以在調試模式下瀏覽代碼。例如,您可能希望執行一行代碼而不必擔心所調用方法的細節。或者,當您從應用程序,庫或API中調用另一個方法時,您可能更希望查看執行哪幾行代碼。您可以通過各種步驟操作來執行此操作。
在調試模式下啟動應用程序之前,請設置一個斷點。各種步驟操作是:
讓我們使用所有前面的操作來調試Coordinates類。我們將通過加強在代碼中的行啟動main()方法,步入removeValues()方法,和力步入remove()的方法ArrayList類和equals()檢查方法怎樣的值lineCoordinates列表被參考變量的值進行比較p,以便可以從列表中刪除匹配的值。如果在調試時前進到一行代碼,則可以使用Drop Frame從調用堆棧中刪除一幀并返回到調用方法。
在示例應用程序中,我們發現“錯誤”是由該equals()方法比較值的方式引起的。僅當引用匹配時才返回true,如果引用的對應字段值匹配則不返回true。
現在,讓我們重新運行代碼,并檢查其是否按預期工作。啟動應用程序并查看結果。
現在一切看起來都很好。我們設法找到一個錯誤并予以修復!
如果您要切換類并閱讀代碼,而錯過了代碼執行的位置,則可以單擊Show Execution Point。要逐行跳過執行代碼,可以前進到一行并單擊Run to Cursor。
變量窗格
內聯調試器非常有用,因為它在您逐步執行代碼時會在編輯器中顯示變量的值。但是,“變量”窗格顯示了更多詳細信息。
在此示例中,由于我們沒有覆蓋該類的toString()方法Point,因此編輯器窗口顯示了類名和調試器對象ID,這似乎并沒有太大幫助。調試器窗格顯示變量的所有字段,包括私有字段。
單擊堆棧將向我們顯示與該堆棧相關的變量。
您可以右鍵單擊變量,然后選擇“ 跳轉到源(F4)”以查看聲明該變量的位置,以更好地理解您的代碼。通過選擇選項“ 跳轉到類型源(Shift + F4)”,您還可以查看非基本變量的定義。
在調用堆棧中,您可能需要評估一個表達式以驗證您的假設。例如,我可以評估的值this可變,或其他有效的表達式,如this兩倍等于的實例Point類,或者this是.equals()到的一個實例Point的類。
您可以通過添加新的監視來創建一個變量,該變量的值可在所有調用堆棧中訪問。說,System.getProperty然后使用您的操作系統的名稱。
您可以創建監視以查看所有調用堆棧中某些變量的值。有多種方法可以做到這一點。您可以在編輯器中的代碼上單擊鼠標右鍵,然后選擇添加到手表。在“變量”窗格中,您也可以單擊變量并將其拖放到“監視”窗格中。
這些變量的值可能并非在所有調用堆棧中都可用。它實際上取決于變量的范圍。
修改代碼行為
您是否知道可以更改代碼的行為而無需更改其源代碼?這也適用于另一個API或框架定義的代碼。
在此代碼執行中,要比較的實例的x和y字段Point相等,并且此equals()方法將返回true。我們可以通過在變量窗格中右鍵單擊并選擇Set Value…來更改變量的值。當我們這樣做時,代碼的行為就會改變。使用修改后的值,該equals()方法將返回,false并且不會從中刪除該值ArrayList。
====================================================
想要了解或購買IntelliJ IDEA正版授權的朋友,歡迎
JetBrain技術交流群現已開通,QQ搜索群號“786598704”或者掃描下方二維碼即可加入
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: