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

MeteorSeed 發表於 2021-06-09
.Net

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

診斷工具不再需要 .NET SDK

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

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

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

  例如,如果你在 x64 Ubuntu 上執行 .NET Core,你可以從 https://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 中關於診斷工具的更多改進。

原文連結

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

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