工欲善其事,必先利其器。無論你的 IDE 是 IntelliJ IDEA、Pycharm、WebStorm、GoLang、還是PhpStorm ,調試器都是標配。在遇到有問題的程序時,合理的利用調試器的跟蹤和斷點技巧,可以很快的定位出問題原因。下面讓我們以 Pycharm 為例,一起來系統的學習下 IDE 的調試技巧吧。
01.Debug 運行方式
在代碼所在行號處左擊鼠標,就會設置一個行斷點。點擊 Pycharm 右上角的小蟲子圖標按鈕,就會以 DeBug 的方式運行代碼。下面是 DeBug 工作界面的簡單介紹。
02.菜單按鈕功能介紹
平常 Debug 代碼,常用到的一些調試按鈕如下,藍顏色的字體是按鈕的名稱:
1).Resume Programe:恢復程序,比如,你在第 12 行和 16 行有兩個斷點,當前運行至第 12 行,按 Resume Programe ,則運行到下一個斷點(即第 16 行);
2).Step Over:
一行一行地往下走,如果這一行上有方法, 不會進入方法。例如下面第 17 行代碼有自己的實例方法,點擊 Step Over 按鈕調試代碼就不會進入這個實例方法。
3).Step into:
強制步入,能進入任何方法,查看底層源碼的時候可以用這個進入官方類庫的方法。
4).Step Into My Code
為單步進入,如果當前行有自定義的方法,會進入方法內部,但不會進入官方類庫的方法,效果如下:
03.常用的 DeBug 小技巧
1).斷點條件調試
有這樣一個場景,代碼 DeBug 的時候,我想知道下面代碼 index 為 10 時, date_1的值是什么,正常來說要 代碼 DeBug 循環 10 次,很不方便。
在 IDE 中有個條件斷點,只需設置好變量條件,只有當某個變量等於你設置的條件的值時,斷點就會自動停下。首先右擊第 24 行的斷點,給 Conditon 設置變量條件 index == 10,並點擊 Done 保存設置。
當 index 的值為 10 時,DeBug 就會自動停下,效果如下圖:
2).計算表達式
當我們 Debug 某個方法時,有時候會忘了傳入某個參數或者傳錯了,這個時候又不想重新Debug,就可以通過計算表達式來設置某個變量的值,如下圖,發現 day_int = 367 不是期望的值,可以鼠標右擊下面藍色的 day_int , 選擇 Set Value, 對 day_int 臨時修改值
下面的代碼程序會根據重新賦的值向下運行,可以看到變量 num_30 的值是 200 整除 30 的結果。
3).多線程調試
有時候發現對多線程並發代碼無法調試, 並不會所有斷點都走到,代碼中 87 行的 args 里的變量給了 6個 值,線程並發數量設置為 3 個,第 71 行的斷點調試我只循環了 2 次,正常來說應該循環 6 次,如下圖:
出現上面的情況是因為 IDE 在 Debug 時默認阻塞級別是 Thread,解決辦法是將它的阻塞級別改為 All, 阻塞其它線程,只有在當前調試線程走完時才會走其它線程。配置方法是右擊斷點,Suspend 的值改為 All ,再點擊 Make Default, 最好點擊 Done 保存設置。
修改后運行的效果如下:
轉:https://mp.weixin.qq.com/s/MSj9JdNhzdSeP0qdF2piEw