Visual Studio Debugging Tools (活用除錯工具)

2021-03-01

筆記使用 Visual Studio 的除錯功能技巧。

logo

說明

一般的情境,如果只是要測試程式功能,不需要特別使用 F5 來進行除錯,因為除錯需要較長的啟用應用程式時間,應該使用 Ctrl + F5 的方式啟用但不偵錯應用程式。

設定中斷點

快捷鍵 F9 設定後,使用除錯模式運行應用程式,當觸發到中斷點會自動停止,並且可以檢視自動變數(Auto)與區域變數(Local)。

連續中斷點

可以設置多個中斷點,並且使用 Continue, 繼續(F5) 的按鈕來前往下一個中斷點。

條件式中斷點

中斷點可以設定觸發的條件,對於迴圈的檢查情境下,只有當屬性符合特定的規則才會觸發中斷點,可以加速除錯的步驟。

Watch, 監測

可以在中斷點中將相關的變數加入 Watch,如此一來可以比較除錯過程中 Watch 監測值的變化,更可以進一步的直接修改監測值來達到測試、除錯的效果。

Autos, 自動變數 / Locals, 區域變數

相對於逐一設定 Watch,自動變數及區域變數會自動顯示相關聯的變數,同時也可以從 Autos 或者 Locals 來修改相關變數進行測試。

自動變數是中斷點行使用到的相關變數;區域變數則是該程式範圍(Funciton Scope)所使用到的相關變數。換言之,自動變數是區域變數的子集。

Step Into(F11) / Step Over(F10) / Step Out(Shift + F11)

Step Into 與 Step Over 都是從目前的中斷點繼續往下一個步驟,但差別在於如果接下來要執行的是函式,Step Into 會深入函式之中,並逐步執行;Step Over 則會直接進行至函數回傳結果。

所以 Step Into 可以用以檢視呼叫函式的步驟助於除錯,而如果已經處於函式之中想要結束,可以藉由 Step Out 來完成並離開函式並繼續進行除錯。

Pinned DataTips

在除錯模式中,將變數檢視鎖定在畫面上,不僅可以觀察程式執行過程變數的變化,在不同 Session 的除錯之中,前一次的變數值也會被帶出來方便做比較。

進階的除錯技巧 🤠

調整執行中的 statement

可以在 Debug Mode 調整黃箭頭來改變目前的執行,甚至可以往回執行;或者點選程式碼的綠箭頭,執行到綠箭頭的程式碼;或者使用滑鼠直行至游標處。

偵錯中同步編輯

Inmediate Window, 即時運算

可以從 Debug 選單的視窗中啟用「即時運算」,在即時運算視窗可以互動式的輸入變數名稱,進行查詢或者是變更。

Trace Points, 追蹤點

在 Visual Studio 中斷點上,可以設定 Action 將中斷點改為追蹤點,差別在於中斷點會停下讓使用者檢視,追蹤點則是可以在 Debug Output 留下指定的訊息,方便在迴圈的情境除錯。


Symbol Files & Source

在專案編譯的過程,會產生 DLL 與 PDB 檔,其中 PDB 檔,也稱為 Symbol Files 是用於連結 Source Code 與 Compiled Code,所以藉由 PDB 檔才能夠 Debug Code。而從 Nuget 等下載的專案,僅有 DLL 檔案,因此沒有辦法 Debug,但如果 Nuget Package 開發者由提供 PDB 檔在相關服務上(例如 GitHub),藉由 Source 的設定就可以讓 Visual Studio 自行從 GitHub 取回該專案的 Symbol Files。

Debug JavaScript

身為地表最強大的 IDE,當然是連前端程式也可以一併 Debug,只要在 Debug 的 Settings 啟用支援 JavaScript,並搭配對應的瀏覽器,照樣可以在 Js Code 中設定中斷點、監測值等方式進行除錯。

Remote Debug & Attach To Processes

開發環境和作業環境畢竟還是會有落差,如果在開發環境沒有問題,但部署後就發生問題的時候,可以使用 Remote Debug。

遠端伺服器必須安裝 Remote Tools,Client 端可以藉由 Attach Processes 的方式連線到遠端伺服器並進行除錯。


Remote Debugging

參考資料

從Debugger學除錯

First look at the Visual Studio Debugger

Pluralsight - Visual Studio 2019: Debugging

Pluralsight - Advanced Debugging with Visual Studio 2019