1. 用好idea插件工具:
- Codota:智能AI代碼補全工具,推薦安裝使用
- FindBugs-IDEA:潛在bug檢查
- GenerateAllSetter:快速生成對應實體類的Setter方法,使用頻率特別高
- GitToolBox:配合版本控制工具git使用,非常直觀顯示當前項目分支,及代碼未更新,未提交數目。省去查詢分支和最新代碼等不必要的麻煩
- GsonFormat:當面對一大堆JSON數據需要生成實體對象的時候,這個時候GsonFormat就派上了用場,一鍵生成對應實體對象,使用頻率也特別高
- POJO to JSON:自動把JAVA對象轉換為json字符串,使用頻率一般
- SequenceDiagram:生成時序圖插件,閱讀源碼特別實用
- Statistic:代碼統計插件
- String Manipulation:文本轉換工具,使用頻率一般
- Jrebel for Intellij:熱部署插件調試必備神器
- Git Commit Template:美化git提交消息
2. 熟練使用一些Idea語法提示和快捷鍵:
參考:https://cloud.tencent.com/developer/article/1497529
比如:
1. 快速定義局部變量,在字符串或者數字……后面輸入 .var,回車,IDEA會自動推斷并快速定義一個局部變量
2. 改變參數、方法等命名。shift+alt+R
3. 改變選中的大小寫。ctrl+shift+y進行字母大小寫切換
4. 快速生成main方法。psvm回車
5. 快速打印輸出。sout回車
6. 快速定義成員變量,在值后面輸入.field,可以快速定義一個成員變量,如果當前方法是靜態的,那生成的變量也是靜態的
7. 快速判斷(非)空。非空:.notnull 或者 .nn,空:.null
8. 快速取反判斷。輸入 .not 可以讓布爾值快速取反,再輸入 .if 可快速生成 if 判斷語句塊,.else
9. 快速遍歷集合。.for, .fori, .forr 都可以滿足你的要求
10. 快速返回值。在值后面輸入.return,可以讓當前值快速返回
11. 快速生成同步鎖。在對象后面輸入.synchronized,可以快速生成該對象的同步鎖語句塊
12. 快速生成JDK8語句。
13. flag.try 快捷生成 try{ flag }catch(Exception e){}
14. 顯示方法的調用樹,鼠標選中對應的方法的情況下,點擊菜單欄的Navigate --> Call Hierarchy
3. 熟練使用Idea調試模式(debug模式):
斷點:是一種附加在源代碼上面的特殊標記,在調試模式(debug模式)
下可以觸發特定的動作
,比如打印線程調用棧信息、計算值、打印指定表達式的值等等。Tips:斷點一但設置就會一直保存在工程中直到手動刪除
- 通過配置allow parallel run讓一個服務開多個端口運行?
- 斷點時動態改變參數里面的值?
- 控制線程的執行順序?
比如:
1. Line breakpoint(行斷點):在指定代碼行設置斷點,屬于行級別的斷點
2. Temporary line breakpoint(臨時行斷點):與行斷點類似,不同之處在于該類型的斷點在被激活之后會被立即刪除
3. Field watchpoint(屬性斷點):讀取或者修改屬性時會激活屬性斷點
4. Method breakpoint(方法斷點):它是標記在方法那一行的斷點,有自己特有的屬性參數
5. Exception breakpoint(異常斷點):當程序拋出指定異常時會激活異常斷點。與行斷點不同,異常斷點不需要與源代碼映射(不需要打在具體某一行代碼上),因為異常斷點應用程序級別的
斷點參數:
- Suspend 若它不被選中的話斷點的相關動作依然激活執行,只是線程不會被組塞了而已。它的兩種阻塞策略如下:
- All: 阻塞該程序內所有線程(默認)
- Thread:只阻塞當前斷點所在線程(在多線程調試、遠程調試中強烈建議使用這種方式)
- Condition 條件斷點,只有書寫的表達式返回true時候斷點才會被激活
- 比如在for循環時,想讓某個值都等于某值時才進入斷點
- Log
- 勾選"Breakpoint hit message":斷點激活時輸出提示日志
- 勾選"Stack trace":斷點激活時輸出程序調用棧信息
- 勾選"Evaluate and log":并在下面的輸入框中輸入"args",斷點激活時會計算并輸出變量 args 的值
- Temporary line breakpoint(臨時行斷點)
-
Remove once hit
這個復選框給勾選上(此類型斷點其實使用較少)
-
- Field watchpoint(屬性斷點)
- Watch 選中"Filed Access" 讀取的時候都會斷住。選中"Filed madification"表示修改的時候都會斷住
- Method breakpoint(方法斷點)必須把斷點打在方法那一行上
- Watch:
- “Method entry”:進入方法時激活斷點
- “Method exit”:出去方法時激活斷點
- “Emulated”
- Watch:
- Exception breakpoint(異常斷點)異常斷點屬于非常特殊的一種斷點類型,
它不對應任何一行代碼
,因為它屬于程序級別的斷點。- Notification
- “Catch excetion”:程序在捕獲(Try Catch)這個異常時激活斷點
- “Uncatch excetion”:不catch捕獲異常時激活斷點
- Notification
image-20201215094918844.png
image-20201215095800359.png
高級調試技巧:
回退斷點:調試的時候,想要重新走一下流程而不用再次發起一個請求,其實就是回退到上一個方法調用的開始處,在IDEA里測試無法一行一行地回退或回到到上一個斷點處,而是回到上一個方法。回退的方式有兩種,一種是Drop Frame按鈕,按調用的方法逐步回退,包括三方類庫的其它方法(取消Show All Frames按鈕會顯示三方類庫的方法。
第二種方式,在調用棧方法上選擇要回退的方法,右鍵選擇Drop Frame,回退到該方法的上一個方法調用處,此時再按F9(Resume Program),可以看到程序進入到該方法的斷點處了。
中斷Debug:在Debug的時候,中斷請求,不要再走剩余的流程.可以通過Force Return,即強制返回來避免后續的流程,點擊Force Return,彈出Return Value的窗口,來強制返回,從而不再進行后續的流程
調試窗口里的Settings -> Show Method Return Values開關可以顯示方法的返回值。
調試內存泄露:調試內存泄露的關鍵是能查看堆內存的使用詳情,有了詳細的信息才好定位出現問題的代碼。在idea的右下窗口打開memory view
遠程調試(遠程Debug):
遠程調試
是調試分布式系統的一個利器。因為現在都以微服務部署,你不可能在本地同時啟動N個服務來做本地調試。遠程調試時請確保你本地的代碼和遠程的一模一樣。
-
要讓遠程服務器運行的代碼支持遠程調試,也就是啟動的時候必須加上特定的
JVM參數
:
(適用于JDK8以上)
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${debug_port} demo.jar
(適用于JDK8以下)
java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port} demo.jar
- idea使用remote鏈接遠程端口(注意
ip:port
要對應上):”Edit Configurations” -> “Remote” 配置好后debug啟動