.NET Core 中有哪些診斷工具可供使用?

軟體不一定會如您預期般地運作,但是 .NET Core 具有可協助您迅速且有效地診斷這些問題的工具與 API。

原生 AOT 部署是自 .NET 7 以來已可用的應用程式模型。 如需原生 AOT 應用程式的 .NET 8 診斷支援相關資訊,請參閱原生 AOT 診斷

此文章會協助您找出所需的各種工具。

偵錯工具

偵錯工具可讓您與您的程式互動。 暫停、以累加方式執行、檢查及繼續等功能,可讓您取得您程式碼行為的見解。 偵錯工具是診斷可輕易重現之功能性問題的第一個選擇。

單元測試

單元測試是持續整合和部署高品質軟體的重要元件。 單元測試的設計是要在您中斷某個項目時提前警告您。

可觀察性的檢測

.NET 支援使用計量、記錄和分散式追蹤的業界標準檢測技術,這些技術通常被稱為三個可觀察性要素

檢測是新增至軟體專案以記錄其執行動作的程式碼。 然後此資訊可以收集在檔案、資料庫或記憶體內,並加以分析,以了解軟體程式的運作方式。 這通常用於生產環境中,以監視問題並加以診斷。 .NET 執行階段具有可選擇性啟用的內建檢測,以及可讓您為應用程式新增特製化的自訂檢測的 API。

記錄

記錄是一項技術,可檢測程式碼以產生記錄檔,這是程式執行時所發生有趣事件的記錄。 往往會將記錄事件的一組基準預設設定為開啟,而且可以隨選啟用更廣泛的記錄來診斷特定問題。 效能額外負荷會根據記錄的資料量而變動。

在大部分情況下,無論是將記錄新增至現有專案還是建立新專案,ILogger 基礎結構都是理想的預設選擇。 ILogger 支援快速結構化記錄、彈性設定,以及一組常見的接收器,包括主控台 (這是您在執行 ASP.NET 應用程式時所看到的項目)。 此外,ILogger 介面也可以作為許多第三方記錄實作的外觀,以提供豐富的功能和擴充性。

計量

計量是一段時間記錄的數值度量,可監視應用程式效能和健康情況。 計量通常用來在偵測到潛在問題時產生警示。 計量具有非常低的效能額外負荷,而且許多服務都會將其設定為一律開啟遙測。 例外狀況通常會記錄為計量,而且可以進行摘要彙總以減少資料的基數。 如需詳細資訊,請參閱例外狀況摘要彙總

分散式追蹤

分散式追蹤是一種特殊形式的記錄,可協助您將散佈在多部電腦或程序的應用程式內的失敗和效能問題當地語系化。 此技術會追蹤透過將由不同應用程式元件完成的工作相互關聯的應用程式的要求,並將它與應用程式可能針對並行要求正在執行的其他工作分開。 您可以選擇性地追蹤每個要求並且可以選擇性地取樣以繫結效能額外負荷。

收集檢測

有多種方式可從應用程式輸出檢測資料,包括:

資源監視

資源監視是持續觀察和追蹤系統內各種運算資源的使用率、效能和可用性的程序。 這些資源可以包括硬體元件 (例如 CPU、記憶體、磁碟儲存體和網路介面),以及軟體元件 (例如應用程式和服務)。 資源監視通常會用來偵測和診斷效能問題,並確保系統可在預期的參數內運作。

特製化診斷

如果偵錯或可觀察性不足,.NET 會支援其他診斷機制 (例如 EventSource、傾印、DiagnosticSource)。 如需詳細資訊,請參閱特製化診斷一文。

診斷工具

.NET 支援一些 CLI 工具,其可用來診斷您的應用程式。

.NET Core 診斷教學課程

撰寫您自己的診斷工具

診斷用戶端程式庫可讓您撰寫最適合您的診斷案例的自訂診斷工具。 請查閱 Microsoft.Diagnostics.NETCore.Client API 參考中的資訊。

針對記憶體流失進行偵錯

教學課程:偵錯記憶體流失會逐步解說如何尋找記憶體流失。 dotnet-counters 工具可用來確認流失,而 dotnet-dump 工具可用來診斷流失。

針對高 CPU 使用量進行偵錯

教學課程:偵錯高 CPU 使用量會逐步引導您調查高 CPU 使用量。 它會使用 dotnet-counters 工具來確認高 CPU 使用量。 然後,它會逐步引導您使用追蹤效能分析公用程式 (dotnet-trace) 或 Linux perf 來收集和檢視 CPU 使用量設定檔。

針對死結進行偵錯

教學課程:偵錯死結會示範如何使用 dotnet-dump 工具來調查執行緒和鎖定。

偵錯 ThreadPool 耗盡

教學課程:偵錯 ThreadPool 耗盡會示範如何使用 dotnet-countersdotnet-stack 工具來調查 ThreadPool 耗盡。

對 StackOverflow 進行偵錯

教學課程:偵錯 StackOverflow 會示範如何在 Linux 上偵錯 StackOverflowException

對 Linux 傾印進行偵錯

偵錯 Linux 傾印會說明如何在 Linux 上收集和分析傾印。

使用 EventCounters 測量效能

教學課程:在 .NET 中使用 EventCounters 測量效能會示範如何使用 EventCounter API 來測量 .NET 應用程式中的效能。