重構之一用好工具

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”
  • Exception breakpoint(異常斷點)異常斷點屬于非常特殊的一種斷點類型,它不對應任何一行代碼,因為它屬于程序級別的斷點
    • Notification
      • “Catch excetion”:程序在捕獲(Try Catch)這個異常時激活斷點
      • “Uncatch excetion”:不catch捕獲異常時激活斷點
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個服務來做本地調試。遠程調試時請確保你本地的代碼和遠程的一模一樣。

  1. 要讓遠程服務器運行的代碼支持遠程調試,也就是啟動的時候必須加上特定的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
  1. idea使用remote鏈接遠程端口(注意ip:port要對應上):”Edit Configurations” -> “Remote” 配置好后debug啟動
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容