【譯】.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/