共用方式為


.NET 中的診斷

軟體的行為並不總是如您預期的那樣,但 .NET 具有工具和 API,可協助您快速有效地診斷這些問題。

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

本文可幫助您找到所需的各種工具。

偵錯工具

偵錯工具 可讓您與程式互動。 暫停、累加執行、檢查和恢復可讓您深入瞭解程式碼的行為。 偵錯工具是診斷可以輕鬆重現的功能問題的不錯選擇。

側寫器

分析器 可讓您分析程式的效能。 您可以收集記憶體使用率、CPU 使用率和其他指標的資料,以診斷和了解效能問題。

可觀測性的檢測

.NET 支援使用計量、記錄和分散式追蹤的業界標準檢測技術,通常稱為 可觀測性的三大支柱

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

日誌

日誌記錄 是一種技術,其中程式碼被檢測以產生日誌,這是程式執行時發生的有趣事件的記錄。 通常預設會設定一組基準記錄事件,而且可以隨需應變啟用更廣泛的記錄,以診斷特定問題。 效能額外負荷會因記錄的資料量而異。

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

Metrics

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

分散式追蹤

分散式追蹤 是一種特殊形式的記錄,可協助您本地化分佈在多部機器或進程中的應用程式中的失敗和效能問題。 此技術會透過應用程式追蹤要求,將不同應用程式元件所完成的工作相互關聯,並將它與應用程式可能針對並行要求執行的其他工作分開。 可以追蹤每一個要求,而且可以選擇性地採用取樣來限制效能額外負荷。

收集檢測

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

專業診斷

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

診斷工具

.NET 支援許多可用來診斷應用程式的 CLI 工具

.NET Core 診斷教學課程

修復記憶體洩漏

教學課程:偵錯記憶體流失 逐步解說尋找記憶體流失。 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 應用程式中的效能。

編寫您自己的診斷工具

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