你不知道的 IDEA Debug調試小技巧

来源:https://www.cnblogs.com/eamonzzz/archive/2019/10/09/11639416.html
-Advertisement-
Play Games

一、多線程調試斷點 的 斷點調試是有一個模式的選擇的,就像下麵這張圖,平時我們都使用的是預設的 (在 中預設是線程模式) ,這種模式我們只能將一個線程斷下來,但其他線程卻已經執行過了;而將其改為 後,就可以多個線程都斷下來,並且可以很方便的切換線程的執行流程,這就是多線程調試。 在 控制台能夠很方便 ...


一、多線程調試斷點

Intellij IDEAdebug斷點調試是有一個模式的選擇的,就像下麵這張圖,平時我們都使用的是預設的 ALL(在Eclipse中預設是線程模式) ,這種模式我們只能將一個線程斷下來,但其他線程卻已經執行過了;而將其改為 Thread 後,就可以多個線程都斷下來,並且可以很方便的切換線程的執行流程,這就是多線程調試。

debug控制台能夠很方便的查看線程的執行狀態,也可以很方便的選擇某個線程去執行:

二、回退斷點

不知道大伙有沒有遇到這樣一個問題,當我們進行debug時,通常不會進入某個方法一步一步的執行,而是選擇性的跳過;當你想要回頭觀察某個變數的值得變化時,而你剛好沒有跟進去,跳過了這個方法,這個時候,變數就被賦值了,我們通常的做法是重來一次。

其實IDEA的調試功能是非常強大的,我們來看看熟悉的調試視窗:

使用紅色框框出來的部分,表示當前程式執行到哪一塊,哪一部分,你可以嘗試用滑鼠點點看,你會發現編輯器會跳轉到對應的代碼中,當然當前斷點的位置通常會在列表的第一條。然後我們使用右鍵單擊,你就可以看到如下圖所示:

或者你也可以在下圖中找到 Drop Frame

在IDEA中,所謂的回退,叫 Drop Frame,選擇Drop Frame後,程式會跳轉回調用當前這個方法的地方,當然已經改變的值是不會恢復的。但是當該方法再次被調用時,你可以觀察到某個變數什麼時候被改變,至少我們不用再去重新運行一遍程式。

三、條件斷點

條件斷點就是當滿足某個條件(通常是表達式)時,debug斷點才會生效;這在迴圈中debug是非常有用的;例如我們想要在迴圈體中調試:當某個變數滿足某個條件時,需要斷點調試,來查看詳細的執行流程及變化情況。

我們說過,IDEA中的debug功能是非常強大的,要使用條件斷點也非常簡單,下麵這張圖片中 Condition中的內容代表當nameeamon:23時,程式執行到斷點處停下來。

有了條件斷點,這樣一來,那些不相關和我們不關心的代碼就可以直接跳過了。

四、臨時斷點

所謂臨時斷點就是只斷一次,IDEA預設斷點會一致存在。如果你只需要暫停一次,那麼使用臨時斷點會比較方便,因為暫停一次之後斷點就自動消失了,不用手動取消。

臨時斷點可以通過在打斷點時按住 Alt 或者 option 鍵,然後創建斷點。也可以通過右鍵斷點處,選擇 more 然後在視窗中選中 Remove once hit

五、求值計算

求值計算功能在我們debug過程中,可以很方便的查看程式中所有變數的值,也可以臨時修改程式中變數的值,這個功能能在一定程度上輔助我們進行代碼調試。

這個功能可以在debug時在debug視窗打開:

打開後是這樣的:

然後你就可以在表達式輸入框中,輸入你想要的操作,比如,查看變數、修改變數(臨時的)、調用某個方法等;這些操作結果將會在下方的Result 視窗中輸出。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //js layui.use(['laydate', 'layer', 'element', 'form','laypage'], function() { form = layui.form, form.on('switch(used)', function(data){ var s... ...
  • 一.安裝依賴 ​ or` 二.使用 三.官方文檔 "點我官方文檔" "點我中文官方文檔" ...
  • <script type="text/javascript"> String.prototype.reverse = function(){ this.split("").reverse().join("") } //在二進位中迴文數最低位會是1 那麼代表這個數會是奇數 var num = 11 w... ...
  • 4、數字 4.1 不同進位表示法 ES6中新增了不同進位的書寫格式,在後臺傳參的時候要註意這一點。 4.2 精確到指定位數的小數 將數字四捨五入到指定的小數位數。使用 Math.round() 和模板字面量將數字四捨五入為指定的小數位數。 省略第二個參數 decimals ,數字將被四捨五入到一個整 ...
  • 真實生活中的對象、屬性和方法 在真實生活中,汽車是一個對象。 汽車有諸如車重和顏色等屬性,也有諸如啟動和停止的方法: car.name = porsche car.model = 911 car.length = 4499mm car.color = white car.start() car.dr ...
  • 現代工業化的推進在極大加速現代化進程的同時也帶來的相應的安全隱患,在傳統的可視化監控領域,一般都是基於 Web SCADA 的前端技術來實現 2D 可視化監控,本系統採用 Hightopo 的 HT for Web 產品來構造輕量化的 3D 可視化場景,該 3D 場景從正面展示了一個現代化工廠的現實... ...
  • 橋接模式與裝飾者模式區別: 橋接模式類圖 裝飾者模式類圖 1、定義: (1)橋接模式:將抽象部分與它的實現部分分離,使它們都可以獨立地變化 (2)裝飾者模式:動態地給一個對象增加一些額外的職責,就增加對象功能來說,裝飾模式比生成子類實現更為靈活 2、“獨立部分”不同: (1)橋接模式:抽象類和實現接 ...
  • 中介者模式(Mediator): 在現實生活中,有很多中介者模式的身影,例如QQ游戲平臺,聊天室、QQ群、簡訊平臺和房產中介。不論是QQ游戲還是QQ群,它們都是充當一個中間平臺,QQ用戶可以登錄這個中間平臺與其他QQ用戶進行交流,如果沒有這些中間平臺,我們如果想與朋友進行聊天的話,可能就需要當面才可 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...