天天看點

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

使用啟用了 Source Link 的庫,調試器可以在您進入時下載下傳底層的源代碼檔案,并且您可以像設定任何其他源代碼一樣設定斷點/跟蹤點。啟用 Source Link 的調試使您更容易了解代碼從代碼到運作時的完整流程。Source Link 與語言無關,是以您可以從任何 .NET 語言和一些本地庫中獲益。

  有多少次你在調試器中追蹤一個缺陷,通過代碼,觀察局部變量的值改變,當你碰壁——不是你所期待的值和你不能進入的方法,因為它來自類庫或 .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 進入之前和之後。

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

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

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

  您可以看到 Visual Studio 已經下載下傳了比對的源代碼并進入了該方法。如果您檢視 Autos 視窗,它會顯示傳入的本地變量。您可以按照自己的意願逐漸進入、穿過和退出架構代碼。

調試一個依賴

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

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

  當插入時,調試器跳過了兩個用 DebuggerStepThrough 标記的方法,并在 CreateDefault 方法的下一條語句中停止。由于源檔案來自網際網路(本例中是 GitHub),是以會提示您允許使用它,無論是單個檔案還是所有檔案。

異常

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

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

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

啟用 Source Link

  由于 Source Link 從網際網路上下載下傳源檔案,預設情況下它是不啟用的。以下是如何啟用它:

Visual Studio

  有幾個步驟來啟用它:

  1 Tools > Options > Debugging > Symbols 并確定 “NuGet.org Symbol Server”選項被選中。為符号緩存指定目錄是避免再次下載下傳相同符号的好主意。

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

  如果你想插入.NET Framework 代碼,你還需要檢查“Microsoft Symbol Servers”選項。

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

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

  驗證是 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/

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

作者:MeteorSeed

感謝您閱讀本文,如果您覺得有所收獲,麻煩點一下右邊的“推薦”,您的支援是對我最大的鼓勵...

轉載請注明出處。