成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這樣Debug,排查問題效率大大提升...

開發 前端
文章主要介紹一些一些在實際項目中相對有用的可以提升debug能力的一些經驗。最后如果說實在是有問題,但是又沒辦法進入調試模式,可以考慮arthas的trace和watch。

Debug是開發人員必備的基礎技能,伴隨著開發生涯,只要需要寫代碼,就一定有debug的訴求... 因為大部分開發同學都是用Debug來確認程序是不是預期進行(單元測試也可以)。

Debug一個非常常見的我們以為自己已經熟練掌握的技能,有點像說話一樣,每個人都可以把話說出來,但不是每個人都能表達出影響力...

大家都會Debug,不過有些Debug的方式可能確實會效率更高一些,還是直接進入主題吧;

開始Debug

相信大家都知道如何開始Debug:

1、在Idea的某個程序文件的目標行旁邊,點擊一下,設置個小紅點。即斷點

圖片

2、使用Debug按鈕運行程序,如果程序可以走到斷點這里,就開始進入Debug模式。

圖片

3、基本操作就是:

  • step in 進入方法內部
  • step over 直接執行到下一行
  • step out 跳出當前的方法

重復1,2,3步驟,剛開始調試的時候主要就是這幾個步驟;

下面分享一下一些稍微隱藏一點的調試方法。

斷點相關經驗

只有滿足某些條件才會進入斷點

如果說Debug的位置是網關入口,那么流量會很大,各種類型的請求都會走到這個斷點里面,如果不能按照條件進入斷點,會非常影響我們的效率。

因為進入斷點的請求,都不是我們想要的;這個時候可以對斷點設置條件,當前請求中必須有滿足什么條件才會進入Debug模式。

1、點擊程序的目標行旁邊,生成一個小紅點;2、右鍵小紅點,可以在condition那里設置程序中的條件;

圖片

舉個例子,如下當用Debug運行的時候,是不會走到斷點的。

圖片

而且在設置完成斷點條件后,斷點旁邊會多出一個?和普通的斷點不同。

圖片

Debug斷點只生效一次,同時不阻塞系統

如果說Debug某個正在運行的系統,默認情況下會掛起所有的后續請求,很多人都以為系統死機了... 其實最后發現是你在調試。

有什么辦法,可以在調試的時候不阻塞剩余的請求嗎?1、默認只斷點一次;2、斷點的時候不掛起整個系統;

如下,通過斷點管理器器,進入進來,或者右鍵斷點,然后點擊more可以進入進來 設置掛起選項,只掛起當前正在調試的線程,然后再下面勾選一旦命中移除斷點。

圖片

圖片

靜態斷點,只是想看程序會不會運行到這里來(類似于動態日志)

想確定請求能不能走到某個位置,但是又不想進入debug模式,感覺太重了,能不能如果經過這一行就直接打個日志呢?

這對于有時候程序的一些方法沒有打日志,但是又想確認是不是能執行到這里有幫助。

在斷點配置里面勾選,命中后打日志,也可以自己加一些其他的輸出:

  • 不要掛起程序
  • 命中處打日志

圖片

圖片

分組管理斷點(系統不同鏈路的斷點)

系統常用的鏈路主要就幾條,而常調試問題的地方也只有幾處,可以把這幾處位置的斷點管理起來,在遇到問題的時候直接把斷點分組管理拿出來就可以了。關注公眾號:碼猿技術專欄,回復關鍵詞:1111 獲取阿里內部Java性能優化手冊

圖片

遠程服務器Debug

這里主要是一個配置問題,和本地Debug區別不大,學會配置就好了。啟動程序的時候:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -jar 待發布的程序jar包名稱.jar

在Idea里面:

圖片

調試相關經驗

程序已經進入斷點了,這個時候要查問題了,有一些需要了解的嗎。

快速執行到某個位置

有時候我們的斷點沒有設置在某個位置,但是也不想設置在哪個位置;在Debug的時候想讓程序直接運行到那個位置,怎么處理?

第一種方式:鼠標移動到對應的行數,然后按下run to cursor按鈕

圖片

第二種方式:直接點擊文件旁邊的數字即可,運行到對應的行哪里

圖片

回退重新開始執行

在一些復雜的鏈路中,方法調用很長,手一抖結果代碼又運行了幾行,這個時候想去重新開始執行這個斷點怎么辦?

常規操作是再模擬發出個請求,重新進入斷點;但其實Idea已經提供了對應的方式,直接撤回當前的幀即可,斷點會重新進入方法開始執行。

在Frame的位置點擊撤回按鈕,就會重新進入這個方法開始運行

圖片

中斷后續執行鏈路

如果說debug到一半發現可能會往數據庫寫入臟數據,想直接停止當前的調試,怎么做?

同樣在幀的位置,右鍵,可以提前返回不繼續運行,這個提前返回是針對當前的方法的,也可以直接拋出異常;

圖片

調試Strem流

Java8之后的labmda表達式里面一般流程會多一點,也不是很好調試,Idea也有對應的工具,可以直接查看Strem流中的數據,在Debug Window下發,如果識別到labmda表達式后會展示出來。

圖片

圖片

斷點的時候運行一些額外代碼

在Debug模式下,Idea提供了一個類似于解釋器的工具,可以輸入一些額外的程序在運行,哪怕和本次debug無關;

當然有個店是這個表達式執行只會返回最后y一行語句的結果。

圖片

圖片

總結

  1. debug代碼是一個常用而且很常見的技能,但是不是每個人都能很有效率的debug代碼...
  2. 有一些idea隱藏的debug方式,雖然一些人不關注,但是有用并且能極大提升效率
  3. 文章主要介紹一些一些在實際項目中相對有用的可以提升debug能力的一些經驗。最后如果說實在是有問題,但是又沒辦法進入調試模式,可以考慮arthas的trace和watch。
責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2024-02-21 17:08:35

2023-05-26 00:06:05

2012-05-21 16:50:52

愛普生掃描儀

2023-04-26 18:09:32

人工智能AI

2023-11-27 18:01:17

MySQL技巧

2020-07-23 15:32:25

智能標注

2021-03-08 08:02:40

IDEA插件JSON

2021-05-11 16:44:42

Windows工具軟件

2015-03-10 17:07:09

BlueHost云架構服務

2020-07-29 08:30:48

微服務架構數據

2024-03-17 20:01:51

2025-03-31 10:42:31

2022-02-28 10:02:54

Linux技巧命令

2022-08-02 16:38:53

惡意軟件密碼

2022-07-10 22:29:42

AtomicJDK項目

2023-10-07 08:54:28

項目httpPost對象

2010-07-20 10:46:23

Spring RooSpring Roo Spring Roo

2021-07-27 15:58:12

Python日志代碼

2011-03-28 10:03:46

Btrace

2022-06-30 08:37:40

VSCodePython
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本久久www成人免 成人久久久久 | 成人三级视频 | a级网站| 亚洲视频在线看 | 国产成人精品免费 | 国产黄色av网站 | 亚洲色综合| 亚洲精品欧美 | 欧美视频区| 亚洲永久入口 | 国产欧美精品一区二区 | 久久久久久免费毛片精品 | 日韩aⅴ在线观看 | 欧美日韩在线播放 | 欧美一区二区在线观看 | 日韩一二三区视频 | 91高清免费观看 | 在线视频国产一区 | 四虎永久免费影院 | 亚洲综合二区 | 成人免费一区二区三区视频网站 | 午夜av在线 | 精品国产乱码久久久久久蜜柚 | 日日日视频 | 不卡的av在线 | 精品国产一区二区三区久久影院 | 国产一区二区久久 | 国产一区二区在线免费观看 | 日韩在线视频精品 | 在线国产一区二区 | 久久国产精品-久久精品 | 久久精品国产一区二区电影 | 久久一| 91在线免费视频 | 成人免费在线视频 | 久久久tv | 日本福利一区 | 中文字幕成人在线 | 粉嫩高清一区二区三区 | a视频在线 | 日韩一区二区三区av |