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

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

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

偵錯工具

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

單元測試

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

可觀察性的檢測

.NET 支援使用計量、記錄和分散式追蹤的業界標準檢測技術。 檢測是新增至軟體專案的程式碼,用來記錄其執行作業。 此資訊接著可以在檔案、資料庫或記憶體中收集,並加以分析,以瞭解軟體程式的運作方式。 這通常用於生產環境中,以監視問題並加以診斷。 .NET 執行時間具有可選擇性啟用的內建檢測,以及可讓您為應用程式新增特製化的自訂檢測 API。

計量

計量 是一段時間記錄的數值度量,可監視應用程式效能和健康情況。 計量通常用來在偵測到潛在問題時產生警示。 計量具有非常低的效能額外負荷,而且許多服務都會將其設定為一律開啟遙測。

記錄

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

分散式追蹤

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

傾印

傾印是檔案,其中包含建立時進程的快照集。 這些可用於檢查應用程式的狀態以進行偵錯。

符號

符號 是原始程式碼與編譯器所產生的二進位檔之間的對應。 這些通常是由 .NET 偵錯工具用來解析源行號、區域變數名稱,以及其他類型的診斷資訊。

在容器中收集診斷

非容器化 Linux 環境中的相同診斷工具也可以用來 收集容器中的診斷。 只有一些使用方式變更,以確保工具可在 Docker 容器中運作。

.NET Core 診斷全域工具

dotnet-counters

dotnet-counters 是一種效能監視工具,可用於第一層的健康情況監視和效能調查。 它會觀察透過 EventCounter API 發佈的效能計數器值。 例如,您可以快速監視 .NET Core 應用程式中擲回的 CPU 使用量或例外狀況速率等專案。

dotnet-dump

dotnet-dump工具是一種在沒有原生偵錯工具的情況下收集和分析Windows和 Linux 核心傾印的方法。

dotnet-gcdump

dotnet-gcdump工具是收集 GC (垃圾收集行程) 即時 .NET 進程的傾印的方法。

dotnet-trace

.NET Core 包含稱為 EventPipe 的 ,可透過其公開診斷資料。 dotnet-trace工具可讓您從您的應用程式取用有趣的分析資料,以在需要根本原因的應用程式執行速度緩慢的情況下有所説明。

dotnet-stack

dotnet-stack工具可讓您快速列印執行中 .NET 進程中所有線程的 Managed 堆疊。

dotnet-symbol

dotnet-symbol 會下載 (符號、DAC/DBI、主機檔案等) 開啟核心傾印或迷你傾印所需的檔案。 如果您需要符號和模組,以偵錯在不同電腦上擷取的傾印檔案,請使用此工具。

dotnet-sos

dotnet-sos會在 Linux 和 macOS (和 Windows 上安裝SOS 偵錯延伸模組,如果您使用Windbg/cdb) 。

PerfCollect

PerfCollect 是一個 Bash 腳本,可用來收集追蹤 perf ,以及 LTTng 針對在 Linux 發行版本上執行的 .NET 應用程式進行更深入的效能分析。

.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 Starvation

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

對 StackOverflow 進行偵錯

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

對 Linux 傾印進行偵錯

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

使用 EventCounters 測量效能

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