【譯】使用 Source Link 提高調試效率

  有多少次你在調試器中追蹤一個缺陷,通過程式碼,觀察局部變數的值改變,當你碰壁——不是你所期待的值和你不能進入的方法,因為它來自類庫或 .NET 框架本身;或者您設置了一個條件斷點,等待檢查某個值是如何設置的,然後注意到調用堆棧基本上是灰色的,而不讓您看到調用堆棧中早些時候發生了什麼。如果您可以輕鬆地進入,設置斷點,並在 NuGet 依賴關係或框架本身上使用調試器的所有特性,這不是很好嗎?

  2020年的 .NET 開發實踐在很多方面都比十年前有了很大的不同和改善。最大的變化是 .NET 平台是開源的,並在 GitHub 上維護。我們每天都在使用的許多 NuGet 庫也是在 GitHub 上維護的。這意味著我真正想要在調試器中看到的源程式碼只是一個 HTTPS GET。我們可以有這樣一個非常高效的生態系統,在那裡我們可以對所有依賴項都使用源程式碼進行調試。那太好了!事實上,由 Cameron Taggart 發起的 Source Link 項目意識到了這一點,並建立了一種體驗來實現這一點。讓我來告訴你吧。

  使用啟用了 Source Link 的庫,調試器可以在您進入時下載底層的源程式碼文件,並且您可以像設置任何其他源程式碼一樣設置斷點/跟蹤點。啟用 Source Link 的調試使您更容易理解程式碼從程式碼到運行時的完整流程。Source Link 與語言無關,因此您可以從任何 .NET 語言和一些本地庫中獲益。

調試 Framework

  讓我們看一個例子。有時候,您想要進入框架查看發生了什麼,特別是當發生了一些您沒有預料到的事情時。使用 Source Link,您可以像使用自己的程式碼一樣進入框架方法,檢查所有變數並設置斷點。

  如果您在沒有 Source Link 的情況下嘗試它,您將看到以下內容,在按 F11 進入之前和之後。

  調試器不會單步進入 Console.WriteLine,因為它沒有符號或源程式碼。一旦我們配置 Source Link,當我們介入,我們得到一個不同的結果:

  您可以看到 Visual Studio 已經下載了匹配的源程式碼並進入了該方法。如果您查看 Autos 窗口,它會顯示傳入的本地變數。您可以按照自己的意願逐步進入、穿過和退出框架程式碼。

調試一個依賴

  通常,你試圖解決的問題是一個依賴項。如果您也能進入源程式碼查看您的依賴項,這不是很好嗎?如果依賴項在其構建期間添加了 Source Link 資訊,您可以!下面是一個關於 Newtonsoft.Json 的例子。因為 Newtonsoft.Json 使用了 Source Link 資訊構建,你可以插入到它的程式碼:

  當插入時,調試器跳過了兩個用 DebuggerStepThrough 標記的方法,並在 CreateDefault 方法的下一條語句中停止。由於源文件來自互聯網(本例中是 GitHub),因此會提示您允許使用它,無論是單個文件還是所有文件。

異常

  Source Link 幫助您處理來自框架或依賴項的異常。你已經看過這條消息多少次了,你真正想要的是檢查變數?

  使用 Source Link,調試器將把您帶到拋出異常的位置,然後您可以導航調用堆棧並進行排查。

啟用 Source Link

  由於 Source Link 從互聯網上下載源文件,默認情況下它是不啟用的。以下是如何啟用它:

Visual Studio

  有幾個步驟來啟用它:

  1 Tools > Options > Debugging > Symbols 並確保 「NuGet.org Symbol Server」選項被選中。為符號快取指定目錄是避免再次下載相同符號的好主意。

  如果你想插入.NET Framework 程式碼,你還需要檢查「Microsoft Symbol Servers」選項。

  2 Tools > Options > Debugging > General 中的「Disable Just My Code」,因為我們希望調試器嘗試定位符號支援解決方案之外的程式碼。

  驗證是 Enable Source Link support 是否勾選(默認情況下是這樣)。如果你想進入.NET Framework 程式碼,你還需要檢查啟用 Enable .NET Framework source stepping。這不是 .NET Core 所必需的。

注意

  1. 並非 nuget.org 上的每個庫都有它們的 .pdb 文件。如果你發現調試器找不到你正在使用的開源庫的 PDB 文件,請鼓勵開源庫上傳它們的 PDB 文件。

  2. nuget.org 上的大多數庫都不是預先編譯的,所以如果你只是試著調試這個庫而不是 .NET Framework 本身,你可以省略上面的 env 部分。在某些情況下,使用優化的 .NET Framework 將顯著提高性能。

  3. 只有微軟提供的庫會在微軟符號伺服器上有他們的 .pdb 文件,所以如果你只對一個 OSS(開源軟體)庫感興趣,你可以禁用這個選項。

  在以後的文章中,我們將向您展示如何創建啟用源程式碼鏈接的庫和應用程式,這樣您的用戶就可以從中受益。

原文地址

  //devblogs.microsoft.com/dotnet/improving-debug-time-productivity-with-source-link/