1. 程式人生 > >你可能不知道的IDEA高階除錯技巧

你可能不知道的IDEA高階除錯技巧

一、條件斷點

迴圈中經常用到這個技巧,比如:遍歷1個大List的過程中,想讓斷點停在某個特定值。

條件斷點

參考上圖,在斷點的位置,右擊斷點旁邊的小紅點,會出來一個介面,在Condition這裡填入斷點條件即可,這樣除錯時,就會自動停在i=10的位置

點選看原圖

二、回到"上一步" 

該技巧最適合特別複雜的方法套方法的場景,好不容易跑起來,一不小心手一抖,斷點過去了,想回過頭看看剛才的變數值,如果不知道該技巧,只能再跑一遍。

點選看原圖

參考上圖,method1方法呼叫method2,當前斷點的位置j=100,點選上圖紅色箭頭位置的Drop Frame圖示後,時間穿越了

點選看原圖

回到了method1剛開始呼叫的時候,變數i變成了99,沒毛病吧,老鐵們,是不是很6 :)

注:好奇心是人類進步的階梯,如果想知道為啥這個功能叫Drop Frame,而不是類似Back To Previous 之類的,可以去翻翻JVM的書,JVM內部以棧幀為單位儲存執行緒的執行狀態,drop frame即扔掉當前執行的棧幀,這樣當前“指標”的位置,就自然到了上一幀的位置。

三、多執行緒除錯

多執行緒同時執行時,誰先執行,誰後執行,完全是看CPU心情的,無法控制先後,執行時可能沒什麼問題,但是除錯時就比較麻煩了,最明顯的就是斷點亂跳,一會兒停這個執行緒,一會兒停在另一個執行緒,比如下圖:

如果想希望下一個斷點位置是第2句詩句,可能要失望了:

如果想讓執行緒在除錯時,想按自己的願意來,讓它停在哪個執行緒就停在哪個執行緒,可以在圖中3個斷點的小紅點上右擊,

即:Suspend掛起的條件是按每個執行緒來,而非All。把這3個斷點都這麼設定後,再來一發試試

注意上圖中的紅框位置,斷點停下來時,這個下拉框可以看到各個執行緒(注:給執行緒起個容易識別的名字是個好習慣!),我們可以選擇執行緒“天空中的飛鳥”

斷點如願停在了第2句詩。

四、遠端除錯

這也是一個裝B的利器,本機不用啟動專案,只要有原始碼,可以在本機直接遠端除錯伺服器上的程式碼,開啟姿勢如下:

4.1 專案啟動時,先允許遠端除錯

 java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}

起作用的就是

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

注意:遠端除錯從技術上講,就是在本機與遠端建立scoket通訊,所以埠不要衝突,而且本機要允許訪問遠端埠,另外這一段引數,放要在-jar 或 ${main_class}的前面

4.2 idea中設定遠端除錯

然後就可以除錯了

前提是本機有專案的原始碼 ,在需要的地方打個斷點,然後訪問一個遠端的url試試,斷點就會停下來。

五、臨時執行表示式/修改變數的執行值

除錯時,可以臨時執行一些表示式,參考下圖:點選這二個圖示中的任何1個都可以

點選+號後,就可以在新出現的輸入框裡輸入表示式,比如i+5

然後回車,馬上就能看到結果 

當然,如果除錯時,想動態修改變數的值,也很容易,在變數上右擊,然後選擇Set Value,剩下的事,地球人都知道。

善用上述除錯技巧,相當大家擼起程式碼來會更有感覺,祝大家週末愉快!

相關推薦

14 個可能知道的 JavaScript 除錯技巧

瞭解你的工具可以極大的幫助你完成任務。儘管 JavaScript 的除錯非常麻煩,但在掌握了技巧 (tricks) 的情況下,你依然可以用盡量少的的時間解決這些錯誤 (errors) 和問題 (bugs) 。 我們會列出14個你可能不知道的除錯技巧, 但是一旦知道了,你就會迫不及待的想在下次需要除錯 Jav

可能知道的程式碼小技巧(一)

  在我們日常寫程式碼過程中經常會遇到一些非常簡單但是必須需要書寫的程式碼,但是使得我們程式碼不夠優雅,比如判空,獲取hash值,判斷是否相等,這些程式碼簡單,但是經常需要書寫,那我們能不能用更加優雅的處理它們?        今天介紹一下如何一行程式碼處理那些板樣程式

關於 MySQL 可能知道的 SQL 使用技巧

轉載自:https://zhuanlan.zhihu.com/p/25064592 近來處理了比較多的資料庫維護工作,對 SQL 的語法也算有了更深層次的認識,也學到了很多以前沒有用過的 SQL 語法技巧,這裡統一整理一下,希望對讀者也有所啟發。 本文將主要介紹一些我認為

可能知道IDEA高階除錯技巧

一、條件斷點 迴圈中經常用到這個技巧,比如:遍歷1個大List的過程中,想讓斷點停在某個特定值。 參考上圖,在斷點的位置,右擊斷點旁邊的小紅點,會出來一個介面,在Condition這裡填入斷點條件即可,這樣除錯時,就會自動停在i=10的位置 二、回到"上一步"  該技巧最適合特別複雜的方法套方法的場景,

可能知道的14個JavaScript除錯技巧

瞭解你的工具可以在完成任務的過程中發揮重大作用。儘管傳言 JavaScript 難以除錯,但是如果你掌握了一些除錯技巧,那麼你將會花費更少的時間來解決這些錯誤。 我們已經列出了14個你可能不知道的除錯技巧,但可能要記住,這樣下次你需要除錯 JavaScript

14 個可能知道的 JavaScript 調試技巧

這樣的 自定義樣式 哪些 事情 執行 script gun lin 每次 了解你的工具可以極大的幫助你完成任務。盡管 JavaScript 的調試非常麻煩,但在掌握了技巧 (tricks) 的情況下,你依然可以用盡量少的的時間解決這些錯誤 (errors) 和問題 (b

10 個可能知道的Android Studio技巧

英文原文:medium 當你想不起來某個功能怎麼用的時候 修改快捷鍵 你需要了解的自動補全 在自動提示以後使用 Tab 鍵替換當前的方法或值 當你寫完了一行程式碼 三個定位的小技巧

可能知道的10條SQL技巧,漲知識了!

這幾天在寫索引,想到一些有意思的TIPS,希望大家有收穫。 一、一些常見的SQL實踐 (1)負向條件查詢不能使用索引 select * from order where status!=0 and stauts!=1 

可能知道的 10 條 SQL 技巧,漲知識了!

這幾天在寫索引,想到一些有意思的TIPS,希望大家有收穫。 一些常見的SQL實踐 (1)負向條件查詢不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exist

Android Studio 可能知道的使用技巧

Ctrl+shift+A:快速查詢android studio中的選單 例如設定自動匯入類的功能,只要在輸入框中輸入Auto Import然後選擇對應項即可。 在自動提示以後使用 Tab 鍵替換

提高效率,eclipse上可能知道技巧

一張思維導圖 公眾號回覆“eclipse技巧”可下載源導圖 1、控制檯(console )日誌輸出另儲存 經常會遇到這種情況,習慣性的清掉控制檯上的輸出日誌,再然後發現剛才的日誌居然還有用,不得不又重新除錯一遍,為了解決這種“手賤”的問題,我在網上搜了一些資料,還真解決的方法哈,只需

可能知道的 Android Studio 小技巧之「多行編輯」

Android Studio 大家應該都很熟悉了,但是可能很多人都僅限基本的功能使用,而 Android Studio 非常強大,有很多非常實用卻又鮮為人知的小技巧,熟練掌握這些小技巧將能極大的提高你的工作效率,今天就來給大家介紹一個很實用的小技巧「多行編輯」。

可能知道的JavaScript代碼片段和技巧(下)

dev cat 部分 javascrip finall 轉換 throws hot bject JavaScript是一個絕冠全球的編程語言,可用於Web開發、移動應用開發(PhoneGap、Appcelerator)、服務器端開發(Node.js和Wakanda等等。Ja

可能知道的 Python 技巧

英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz (https://martinheinz.dev) 譯者 | 豌豆花下貓 宣告 :本文獲得原作者授權翻譯,轉載請保留原文出處,請勿用於商業或非法用途。 有許許多多文章寫

Node.js的Buffer那些可能知道的用法

ins min 來看 imu write work and sse ase 在大多數介紹Buffer的文章中,主要是圍繞數據拼接和內存分配這兩方面的。比如我們使用fs模塊來讀取文件內容的時候,返回的就是一個Buffer: fs.readFile(‘filename‘, fu

js--函數參數(可能知道的參數傳遞)

多個參數 函數的調用 調用函數 tle 進行 post span nts 復制 前言: 函數分為有參有返回值,有參無返回值,無參無返回值,無參有返回值;那麽對於無參數的函數你想使用函數的調用怎麽辦呢?如果你想封裝一個代碼,實現多種功能,但是形參大於實參或者實參大於形參又該如

可能知道的viewport

setw 變化 idt content 移動前端 其它 網頁 offset cli 概述 前幾天偶然看到一個pc端網頁,發現用手機打開竟然同比縮放了,作為一個前端從業者,我自然想要弄清它到底是怎麽縮放的。之後查了它的meta信息,css和js,發現沒有任何兼容手機端的代碼,

Oracle delete操作隱藏著可能知道的秘密

tro 移動 準備 明顯 數據 aps AC 註意 nav 一 現象描述Delete是oracle數據庫中的常用操作,尤其是在自動化測試中,初始化環境、前置準備都不可避免的進行增刪操作,但持續一時間後,可能會碰到表空間不足這類報錯現象,這就不禁納悶兒了,明明插入數據前會有刪

可能知道的一些Go Packages知識

return 有一個 匿名 一點 計算 展示 rgs 實現 mem 關於Go Package關於Go Package Go Packages 主要用來把相關的functions, variables, 和constants 組織到一起,這樣你就可以很方便的遷移Package

可能知道的setInterval的坑

ajax請求 之前 以及 while gis false class 就會 tin 之前印象中一直記得setInterval有一些坑,但是一直不是很清楚那些坑是什麽。今天去摸索了下之後,決定來做個記錄以免自己忘記,也希望讓更多人了解到這個坑。 setInterval會無視