【譯】使用 Source Link 提高除錯效率

MeteorSeed發表於2021-08-04

  有多少次你在偵錯程式中追蹤一個缺陷,通過程式碼,觀察區域性變數的值改變,當你碰壁——不是你所期待的值和你不能進入的方法,因為它來自類庫或 .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(開源軟體)庫感興趣,你可以禁用這個選項。

  在以後的文章中,我們將向您展示如何建立啟用原始碼連結的庫和應用程式,這樣您的使用者就可以從中受益。

原文地址

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

相關文章