From e87b288431323f3e682d193a04924b9438d92d87 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:49:22 -0500 Subject: [PATCH 01/12] [DiagnosticsClient] Adjust class protection --- docs/core/diagnostics/microsoft-diagnostics-netcore-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 77a85aada47b4..2e095243d1857 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -14,7 +14,7 @@ This section describes the APIs of the diagnostics client library. ## DiagnosticsClient class ```cs -public DiagnosticsClient +public sealed class DiagnosticsClient { public DiagnosticsClient(int processId); From ed999274d074de1966e05775b9db60398cd2e6d2 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:38:04 -0500 Subject: [PATCH 02/12] [DiagnosticsClient] Update StartEventPipeSession APIs --- .../microsoft-diagnostics-netcore-client.md | 88 ++++++++++++++++++- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 2e095243d1857..f03ed24d7e860 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -23,12 +23,30 @@ public sealed class DiagnosticsClient bool requestRundown = true, int circularBufferMB = 256); + public EventPipeSession StartEventPipeSession( + EventPipeProvider provider, + bool requestRundown = true, + int circularBufferMB = 256); + + public EventPipeSession StartEventPipeSession( + EventPipeSessionConfiguration config); + public Task StartEventPipeSessionAsync( IEnumerable providers, bool requestRundown, int circularBufferMB = 256, CancellationToken token = default); + public Task StartEventPipeSessionAsync( + EventPipeProvider provider, + bool requestRundown, + int circularBufferMB = 256, + CancellationToken token = default); + + public Task StartEventPipeSessionAsync( + EventPipeSessionConfiguration configuration, + CancellationToken token); + public void WriteDump( DumpType dumpType, string dumpPath, @@ -79,6 +97,7 @@ public EventPipeSession StartEventPipeSession( IEnumerable providers, bool requestRundown = true, int circularBufferMB = 256); + public Task StartEventPipeSessionAsync( IEnumerable providers, bool requestRundown, @@ -91,17 +110,41 @@ Starts an EventPipe tracing session using the given providers and settings. * `providers` : An `IEnumerable` of [`EventPipeProvider`](#eventpipeprovider-class)s to start tracing. * `requestRundown`: A `bool` specifying whether rundown provider events from the target app's runtime should be requested. * `circularBufferMB`: An `int` specifying the total size of circular buffer used by the target app's runtime on collecting events. -* `token` (for the Async overload): The token to monitor for cancellation requests. +* `token` (for the async overload): The token to monitor for cancellation requests. ```csharp -public EventPipeSession StartEventPipeSession(EventPipeProvider provider, bool requestRundown = true, int circularBufferMB = 256) -public Task StartEventPipeSessionAsync(EventPipeProvider provider, bool requestRundown, int circularBufferMB = 256, CancellationToken token = default) +public EventPipeSession StartEventPipeSession( + EventPipeProvider provider, + bool requestRundown = true, + int circularBufferMB = 256); + +public Task StartEventPipeSessionAsync( + EventPipeProvider provider, + bool requestRundown, + int circularBufferMB = 256, + CancellationToken token = default); ``` +Starts an EventPipe tracing session using a single provider. + * `provider` : An [`EventPipeProvider`](#eventpipeprovider-class) to start tracing. * `requestRundown`: A `bool` specifying whether rundown provider events from the target app's runtime should be requested. * `circularBufferMB`: An `int` specifying the total size of circular buffer used by the target app's runtime on collecting events. -* `token` (for the Async overload): The token to monitor for cancellation requests. +* `token` (for the async overload): The token to monitor for cancellation requests. + +```csharp +public EventPipeSession StartEventPipeSession( + EventPipeSessionConfiguration config); + +public Task StartEventPipeSessionAsync( + EventPipeSessionConfiguration configuration, + CancellationToken token); +``` + +Starts an EventPipe tracing session using an [`EventPipeSessionConfiguration`](#eventpipesessionconfiguration-class). + +* `config` / `configuration` : An `EventPipeSessionConfiguration` that defines the session. +* `token` (for the async overload): The token to monitor for cancellation requests. > [!NOTE] > Rundown events contain payloads that may be needed for post analysis, such as resolving method names of thread samples. Unless you know you do not want this, we recommend setting `requestRundown` to true. In large applications, this may take a while. @@ -220,6 +263,43 @@ public static IEnumerable GetPublishedProcesses(); Get an `IEnumerable` of process IDs of all the active .NET processes that can be attached to. +## EventPipeSessionConfiguration class + +```csharp +public sealed class EventPipeSessionConfiguration +{ + public EventPipeSessionConfiguration( + IEnumerable providers, + int circularBufferSizeMB = 256, + bool requestRundown = true, + bool requestStackwalk = true); + + public EventPipeSessionConfiguration( + IEnumerable providers, + int circularBufferSizeMB, + long rundownKeyword, + bool requestStackwalk = true); + + public bool RequestRundown { get; } + + public int CircularBufferSizeInMB { get; } + + public bool RequestStackwalk { get; } + + public long RundownKeyword { get; } + + public IReadOnlyCollection Providers { get; } +} +``` + +Represents the configuration for an `EventPipeSession`. + +* `providers` : An `IEnumerable` of [`EventPipeProvider`](#eventpipeprovider-class)s to enable. +* `circularBufferSizeMB` : The size in MB of the runtime's buffer for collecting events. +* `requestRundown` : If `true`, request rundown events from the runtime. +* `requestStackwalk` : If `true`, record a stack trace for every emitted event. +* `rundownKeyword` : The keyword mask used for rundown events. + ## EventPipeProvider class ```cs From 2aaff6a2d33242b98f895e0654c8bd2981021b79 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:39:39 -0500 Subject: [PATCH 03/12] [DiagnosticsClient] Update WriteDump APIs --- .../microsoft-diagnostics-netcore-client.md | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index f03ed24d7e860..5e7fcdc219e64 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -52,12 +52,23 @@ public sealed class DiagnosticsClient string dumpPath, bool logDumpGeneration = false); - public async Task WriteDumpAsync( + public void WriteDump( + DumpType dumpType, + string dumpPath, + WriteDumpFlags flags); + + public Task WriteDumpAsync( DumpType dumpType, string dumpPath, bool logDumpGeneration, CancellationToken token); + public Task WriteDumpAsync( + DumpType dumpType, + string dumpPath, + WriteDumpFlags flags, + CancellationToken token); + public void AttachProfiler( TimeSpan attachTimeout, Guid profilerGuid, @@ -165,7 +176,10 @@ Request a dump for post-mortem debugging of the target application. The type of * `logDumpGeneration` : If set to `true`, the target application will write out diagnostic logs during dump generation. ```csharp -public void WriteDump(DumpType dumpType, string dumpPath, WriteDumpFlags flags) +public void WriteDump( + DumpType dumpType, + string dumpPath, + WriteDumpFlags flags) ``` Request a dump for post-mortem debugging of the target application. The type of the dump can be specified using the [`DumpType`](#dumptype-enum) enum. @@ -175,7 +189,11 @@ Request a dump for post-mortem debugging of the target application. The type of * `flags` : logging and crash report flags. On runtimes less than 6.0, only LoggingEnabled is supported. ```csharp -public async Task WriteDumpAsync(DumpType dumpType, string dumpPath, bool logDumpGeneration, CancellationToken token) +public Task WriteDumpAsync( + DumpType dumpType, + string dumpPath, + bool logDumpGeneration, + CancellationToken token) ``` Request a dump for post-mortem debugging of the target application. The type of the dump can be specified using the [`DumpType`](#dumptype-enum) enum. @@ -186,7 +204,11 @@ Request a dump for post-mortem debugging of the target application. The type of * `token` : The token to monitor for cancellation requests. ```csharp -public async Task WriteDumpAsync(DumpType dumpType, string dumpPath, WriteDumpFlags flags, CancellationToken token) +public Task WriteDumpAsync( + DumpType dumpType, + string dumpPath, + WriteDumpFlags flags, + CancellationToken token) ``` Request a dump for post-mortem debugging of the target application. The type of the dump can be specified using the [`DumpType`](#dumptype-enum) enum. @@ -426,6 +448,25 @@ Represents the type of dump that can be requested. * `Triage`: Include just the information necessary to capture stack traces for all existing traces for all existing threads in a process. Limited GC heap memory and information. Some content that is known to contain potentially sensitive information such as full module paths will be redacted. While this is intended to mitigate some cases of sensitive data exposure, there is no guarantee this redaction feature on its own is sufficient to comply with any particular law or standard regarding data privacy. * `Full`: Include all accessible memory in the process. The raw memory data is included at the end, so that the initial structures can be mapped directly without the raw memory information. This option can result in a very large dump file. +## WriteDumpFlags enum + +```csharp +public enum WriteDumpFlags +{ + None = 0x00, + LoggingEnabled = 0x01, + VerboseLoggingEnabled = 0x02, + CrashReportEnabled = 0x04 +} +``` + +Represents additional options that can be specified when requesting a dump. + +* `None` : No additional behavior. +* `LoggingEnabled` : Enable basic logging during dump generation. +* `VerboseLoggingEnabled` : Enable verbose logging during dump generation. +* `CrashReportEnabled` : Enable generation of a crash report. + ## Exceptions Exceptions that are thrown from the library are of type `DiagnosticsClientException` or a derived type. From 993163e5013e5f53636a355a4120293ee0d13b7d Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:41:34 -0500 Subject: [PATCH 04/12] [DiagnosticsClient] Add ApplyStartupHook APIs --- .../microsoft-diagnostics-netcore-client.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 5e7fcdc219e64..4385c9db2308d 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -87,6 +87,13 @@ public sealed class DiagnosticsClient public Dictionary GetProcessEnvironment(); + public void ApplyStartupHook( + string startupHookPath); + + public Task ApplyStartupHookAsync( + string startupHookPath, + CancellationToken token); + public static IEnumerable GetPublishedProcesses(); } ``` @@ -218,6 +225,22 @@ Request a dump for post-mortem debugging of the target application. The type of * `flags` : logging and crash report flags. On runtimes less than 6.0, only LoggingEnabled is supported. * `token` : The token to monitor for cancellation requests. +### ApplyStartupHook methods + +```csharp +public void ApplyStartupHook( + string startupHookPath); + +public Task ApplyStartupHookAsync( + string startupHookPath, + CancellationToken token); +``` + +Loads the specified assembly with a `StartupHook` in the target process. + +* `startupHookPath` : The path to the assembly containing the startup hook. +* `token` (for the async overload): The token to monitor for cancellation requests. + ### AttachProfiler method ```csharp From 9130adc8a4f3920f5f59b4ffc3a8b48439f6387a Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:42:58 -0500 Subject: [PATCH 05/12] [DiagnosticsClient] Add PerfMap APIs --- .../microsoft-diagnostics-netcore-client.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 4385c9db2308d..dd5b1f71ba8dc 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -94,6 +94,11 @@ public sealed class DiagnosticsClient string startupHookPath, CancellationToken token); + public void EnablePerfMap( + PerfMapType type); + + public void DisablePerfMap(); + public static IEnumerable GetPublishedProcesses(); } ``` @@ -241,6 +246,19 @@ Loads the specified assembly with a `StartupHook` in the target process. * `startupHookPath` : The path to the assembly containing the startup hook. * `token` (for the async overload): The token to monitor for cancellation requests. +### PerfMap methods + +```csharp +public void EnablePerfMap( + PerfMapType type); + +public void DisablePerfMap(); +``` + +Controls generation of perf maps in the target process. + +* `type` : The [`PerfMapType`](#perfmaptype-enum) indicating the type of perf map to enable. + ### AttachProfiler method ```csharp @@ -490,6 +508,25 @@ Represents additional options that can be specified when requesting a dump. * `VerboseLoggingEnabled` : Enable verbose logging during dump generation. * `CrashReportEnabled` : Enable generation of a crash report. +## PerfMapType enum + +```csharp +public enum PerfMapType +{ + None = 0, + All = 1, + JitDump = 2, + PerfMap = 3 +} +``` + +Represents the type of perf map behavior that can be enabled. + +* `None` : No perf map output. +* `All` : Enable all perf map outputs supported by the runtime. +* `JitDump` : Enable JIT dump perf map output. +* `PerfMap` : Enable traditional perf map output. + ## Exceptions Exceptions that are thrown from the library are of type `DiagnosticsClientException` or a derived type. From 2e5e7e134b2647250d701c5c3e2666519a9f8c57 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:44:17 -0500 Subject: [PATCH 06/12] [DiagnosticsClient] Update DiagnosticsClientExceptions --- .../diagnostics/microsoft-diagnostics-netcore-client.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index dd5b1f71ba8dc..1813984272ef5 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -566,3 +566,11 @@ public class ServerErrorException : DiagnosticsClientException ``` This may be thrown when the runtime responds with an error to a given command. + +### ProfilerAlreadyActiveException + +```csharp +public class ProfilerAlreadyActiveException : ServerErrorException +``` + +This may be thrown when a profiler is already loaded into the target runtime and another attach is attempted. From e4a18ae1f5af43d7e951f304e77e1500f9a5fbac Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:48:03 -0500 Subject: [PATCH 07/12] [DiagnosticsClient] Update EventPipeSession APIs --- .../microsoft-diagnostics-netcore-client.md | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 1813984272ef5..7eacd4b7e0df6 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -448,13 +448,19 @@ This class is immutable, because EventPipe does not allow a provider's configura public class EventPipeSession : IDisposable { public Stream EventStream { get; } + public void Stop(); + + public Task StopAsync( + CancellationToken cancellationToken); + + public void Dispose(); } ``` This class represents an ongoing EventPipe session. It is immutable and acts as a handle to an EventPipe session of the given runtime. -## EventStream property +### EventStream property ```csharp public Stream EventStream { get; } @@ -462,14 +468,27 @@ public Stream EventStream { get; } Gets a `Stream` that can be used to read the event stream. -## Stop method +### Stop methods ```csharp public void Stop(); + +public Task StopAsync( + CancellationToken cancellationToken); ``` Stops the given `EventPipe` session. +* `cancellationToken` (for the async overload): The token to monitor for cancellation requests. + +### Dispose method + +```csharp +public void Dispose(); +``` + +Releases resources associated with the `EventPipeSession`. + ## DumpType enum ```csharp From f3a1a392b69bc73d1b8da5b15ab5636273d5ffd8 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:48:49 -0500 Subject: [PATCH 08/12] [DiagnosticsClient] Add DiagnosticsClientConnector APIs --- .../microsoft-diagnostics-netcore-client.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 7eacd4b7e0df6..a085d9ca6adef 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -489,6 +489,36 @@ public void Dispose(); Releases resources associated with the `EventPipeSession`. +## DiagnosticsClientConnector class + +```csharp +public sealed class DiagnosticsClientConnector : IAsyncDisposable +{ + public DiagnosticsClient Instance { get; } + + public ValueTask DisposeAsync(); + + public static Task FromDiagnosticPort( + string diagnosticPort, + CancellationToken ct); +} +``` + +Represents a helper that creates a `DiagnosticsClient` from a diagnostic port and manages the lifetime of the underlying diagnostics server connection. + +* `Instance` : The `DiagnosticsClient` connected to the target runtime. +* `DisposeAsync` : Disposes the underlying server/connection asynchronously. +* `FromDiagnosticPort` : Creates a new `DiagnosticsClientConnector` from the specified diagnostic port. + +```csharp +public static Task FromDiagnosticPort( + string diagnosticPort, + CancellationToken ct) +``` + +* `diagnosticPort` : The diagnostic port string (for example, a listen or connect port) to connect through. +* `ct` : The token to monitor for cancellation requests. + ## DumpType enum ```csharp From d5cf8cef3f7dbbd3a968d084395f88dd18038784 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Sun, 7 Dec 2025 14:50:29 -0500 Subject: [PATCH 09/12] [DiagnosticsClient] Add SupportsEventPipeUserEventsCommand APIs --- .../microsoft-diagnostics-netcore-client.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index a085d9ca6adef..cbe283dbfe602 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -47,6 +47,11 @@ public sealed class DiagnosticsClient EventPipeSessionConfiguration configuration, CancellationToken token); + public bool SupportsEventPipeUserEventsCommand(); + + public Task SupportsEventPipeUserEventsCommandAsync( + CancellationToken token = default); + public void WriteDump( DumpType dumpType, string dumpPath, @@ -169,6 +174,19 @@ Starts an EventPipe tracing session using an [`EventPipeSessionConfiguration`](# * `config` / `configuration` : An `EventPipeSessionConfiguration` that defines the session. * `token` (for the async overload): The token to monitor for cancellation requests. +### SupportsEventPipeUserEventsCommand methods + +```csharp +public bool SupportsEventPipeUserEventsCommand(); + +public Task SupportsEventPipeUserEventsCommandAsync( + CancellationToken token = default); +``` + +Checks whether the target runtime understands the `CollectTracing5` `user_events` IPC command. + +* `token` (for the async overload): The token to monitor for cancellation requests. + > [!NOTE] > Rundown events contain payloads that may be needed for post analysis, such as resolving method names of thread samples. Unless you know you do not want this, we recommend setting `requestRundown` to true. In large applications, this may take a while. From eba7f31dba80511508af7fb8dbc8238d5b3fa924 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Mon, 8 Dec 2025 15:52:40 -0500 Subject: [PATCH 10/12] Revert "[DiagnosticsClient] Add SupportsEventPipeUserEventsCommand APIs" This reverts commit d5cf8cef3f7dbbd3a968d084395f88dd18038784. It will start off as an internal API utilized by dotnet-trace. --- .../microsoft-diagnostics-netcore-client.md | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index cbe283dbfe602..a085d9ca6adef 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -47,11 +47,6 @@ public sealed class DiagnosticsClient EventPipeSessionConfiguration configuration, CancellationToken token); - public bool SupportsEventPipeUserEventsCommand(); - - public Task SupportsEventPipeUserEventsCommandAsync( - CancellationToken token = default); - public void WriteDump( DumpType dumpType, string dumpPath, @@ -174,19 +169,6 @@ Starts an EventPipe tracing session using an [`EventPipeSessionConfiguration`](# * `config` / `configuration` : An `EventPipeSessionConfiguration` that defines the session. * `token` (for the async overload): The token to monitor for cancellation requests. -### SupportsEventPipeUserEventsCommand methods - -```csharp -public bool SupportsEventPipeUserEventsCommand(); - -public Task SupportsEventPipeUserEventsCommandAsync( - CancellationToken token = default); -``` - -Checks whether the target runtime understands the `CollectTracing5` `user_events` IPC command. - -* `token` (for the async overload): The token to monitor for cancellation requests. - > [!NOTE] > Rundown events contain payloads that may be needed for post analysis, such as resolving method names of thread samples. Unless you know you do not want this, we recommend setting `requestRundown` to true. In large applications, this may take a while. From f528fdbbae2e1bc21d55fece95acee451d0f1d44 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Mon, 8 Dec 2025 16:54:04 -0500 Subject: [PATCH 11/12] Update doc date --- docs/core/diagnostics/microsoft-diagnostics-netcore-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index a085d9ca6adef..290b91877817a 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -1,7 +1,7 @@ --- title: Microsoft.Diagnostics.NETCore.Client API description: In this article, you'll learn about the Microsoft.Diagnostics.NETCore.Client APIs. -ms.date: 06/22/2021 +ms.date: 12/08/2025 author: tommcdon ms.author: tommcdon ms.topic: reference From f96a6b467fc16836efd1173bae1fba02082d3939 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 17 Dec 2025 10:18:54 -0800 Subject: [PATCH 12/12] Update docs/core/diagnostics/microsoft-diagnostics-netcore-client.md --- docs/core/diagnostics/microsoft-diagnostics-netcore-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md index 290b91877817a..01c03a8f71f60 100644 --- a/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md +++ b/docs/core/diagnostics/microsoft-diagnostics-netcore-client.md @@ -622,4 +622,4 @@ This may be thrown when the runtime responds with an error to a given command. public class ProfilerAlreadyActiveException : ServerErrorException ``` -This may be thrown when a profiler is already loaded into the target runtime and another attach is attempted. +This exception is thrown when a profiler is already loaded into the target runtime and another attach is attempted.