【譯】.NET 5 中的診斷改進

  基於我們在 .NET Core 3.0 中引入的診斷改進,我們一直在努力進一步改進這個領域。我很高興介紹下一波診斷改進。

診斷工具不再需要 .NET SDK

  直到最近,.NET 診斷工具套件還只能作為 .NET SDK 全局工具使用。雖然這為獲取和更新工具提供了一種方便的方式,但這意味著在沒有完整 SDK 的環境中很難獲得它們。我們現在提供了一個單文件分發機制,它只需要在目標機器上提供一個運行時(3.1+)。

  工具的最新版本總是可以通過以下模式的鏈接獲得:

  //aka.ms/<tool-name>/<platform-runtime-identifier>

  例如,如果你在 x64 Ubuntu 上運行 .NET Core,你可以從 //aka.ms/dotnet-trace/linux-x64 獲得 dotnet-trace。

  支援的平台列表及其下載鏈接可以在每種工具的文檔中找到,例如 dotnet-counters 文檔。所有可用工具和支援的平台運行時標識符的列表可以在 diagnostics repo 中找到。

在 Windows 上分析 Linux 記憶體 dump

  調試託管程式碼需要託管對象和構造的專門知識。數據訪問組件(DAC)是運行時執行引擎的一個子集,它具有這些構造的知識,可以在不使用運行時的情況下訪問這些託管對象。在 .NET Core 3.1.8+ 和 .NET 5+ 中,我們已經開始在 Windows 上編譯 Linux DAC。在 Linux 上收集的 .NET Core 進程 dump 現在可以在 Windows 上使用 WinDBG、dotnet dump analyze 和 Visual Studio 2019 16.8 進行分析。

  有關如何收集 .NET 記憶體 dump 以及如何分析它們的詳細資訊,請訪問 VisualStudio 部落格。

啟動跟蹤

  .NET 診斷工具套件的工作方式是連接到運行時間創建的診斷埠,然後請求運行時使用該通道上的診斷 IPC 協議將資訊導出。在 .NET Core 3.1 中,無法執行啟動跟蹤(通過 EventPipe;ETW 仍然是可能的),因為在工具連接到運行時之前發出的事件將會丟失。在 .NET 5 中,現在可以配置運行時在啟動期間掛起自己,直到工具連接(或讓運行時連接到工具)。

  dotnet -counters 和 dotnet-trace 的5.0版本現在可以啟動 dotnet 進程並從進程開始收集診斷資訊。例如,下面的命令將啟動 mydotnetapp.exe 並開始監聽計數器。

  dotnet counters monitor — mydotnetapp.exe

  關於啟動跟蹤的更多資訊可以在 dotnet-counters 和 dotnet-trace 的文檔頁面上找到。

程式集載入診斷

  在 .NET 5 中,運行時現在通過 EventPipe 為程式集綁定發出事件。此資訊可以幫助您診斷運行時不能在運行時定位程式集的原因。這是對 .NET 框架中 Fusion Log Viewer(fuslogvw.exe)的替換。

  可以使用以下命令收集程式集載入診斷:

  dotnet-trace collect –providers Microsoft-Windows-DotNETRuntime:4:4 –process-id [process ID]

  可以使用 PerfView 分析生成的 .nettrace 文件。

結束

  感謝您試用 .NET 5 中更新的診斷工具。請繼續給我們回饋,無論是在評論中還是在 GitHub 上。我們正在認真傾聽,並將根據您的回饋繼續做出改變。我們將在後續的部落格文章中介紹 .NET 5 中關於診斷工具的更多改進。

原文鏈接

  //devblogs.microsoft.com/dotnet/diagnostics-improvements-in-net-5/