From 0cb498a850c3957e3d188dc8066097253f95741b Mon Sep 17 00:00:00 2001 From: Barbara Rosiak Date: Tue, 18 Nov 2025 16:08:45 -0800 Subject: [PATCH 01/12] Update doc on profiling config settings Fixes #49963 --- .../runtime-config/debugging-profiling.md | 24 ++++++++++++++----- includes/coreclr-prefix.md | 2 ++ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 includes/coreclr-prefix.md diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index 13cdea3ccba28..2e3efee1ee90e 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -9,6 +9,8 @@ This article details the settings you can use to configure .NET debugging and pr [!INCLUDE [complus-prefix](../../../includes/complus-prefix.md)] +[!INCLUDE [coreclr-prefix](../../../includes/coreclr-prefix.md)] + ## Enable diagnostics - Configures whether the debugger, the profiler, and EventPipe diagnostics are enabled or disabled. @@ -27,7 +29,7 @@ This article details the settings you can use to configure .NET debugging and pr | | Setting name | Values | | - | - | - | | **runtimeconfig.json** | N/A | N/A | -| **Environment variable** | `CORECLR_ENABLE_PROFILING` | `0` - disabled
`1` - enabled | +| **Environment variable** | `CORECLR_ENABLE_PROFILING` or `DOTNET_ENABLE_PROFILING` | `0` - disabled
`1` - enabled | ## Profiler GUID @@ -36,19 +38,29 @@ This article details the settings you can use to configure .NET debugging and pr | | Setting name | Values | | - | - | - | | **runtimeconfig.json** | N/A | N/A | -| **Environment variable** | `CORECLR_PROFILER` | *string-guid* | +| **Environment variable** | `CORECLR_PROFILER` or `DOTNET_PROFILER` | *string-guid* | ## Profiler location +Once profiling is enabled, the profiler can be loaded in two ways, with environment variables (cross-plat) or through the registry (Windows only). +### Environment Variable (cross-plat) - Specifies the path to the profiler DLL to load into the currently running process (or 32-bit or 64-bit process). - If more than one variable is set, the bitness-specific variables take precedence. They specify which bitness of profiler to load. -- For more information, see [Finding the profiler library](https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/profiling/Profiler%20Loading.md). +- If any of these environment variables are present, the registry look up is skipped altogether, and the path from `DOTNET_PROFILER_PATH` is used to load the DLL. +- When `DOTNET_PROFILER_PATH` is specified _and_ the profiler is registered, `DOTNET_PROFILER_PATH` always takes precedence. Even if `DOTNET_PROFILER_PATH` points to an invalid path, the runtime still uses `DOTNET_PROFILER_PATH`, and fails to load the profiler. +- `DOTNET_PROFILER` is _always required_. When `DOTNET_PROFILER_PATH` is specified, the registry look up is skipped. The runtime still needs the profiler's CLSID (GUID) to pass it to the class factory's CreateInstance call. + | | Setting name | Values | | - | - | - | -| **Environment variable** | `CORECLR_PROFILER_PATH` | *string-path* | -| **Environment variable** | `CORECLR_PROFILER_PATH_32` | *string-path* | -| **Environment variable** | `CORECLR_PROFILER_PATH_64` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH` or `DOTNET_PROFILER_PATH` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_32` or `DOTNET_PROFILER_PATH_32` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_64` or `DOTNET_PROFILER_PATH_64` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_ARM32` or `DOTNET_PROFILER_PATH_ARM32` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_ARM64` or `DOTNET_PROFILER_PATH_ARM64` | *string-path* | + +### Through the registry (Windows Only) +When the `DOTNET_PROFILER_PATH*` environment variables above are not set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. ## Export perf maps and jit dumps diff --git a/includes/coreclr-prefix.md b/includes/coreclr-prefix.md new file mode 100644 index 0000000000000..175907cf3981f --- /dev/null +++ b/includes/coreclr-prefix.md @@ -0,0 +1,2 @@ +> [!NOTE] +> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and may be removed in the future. **Do not mix both conventions in a project** as this will result in errors. New projects should use the `DOTNET` prefix. \ No newline at end of file From 980ea6442c97f2216492251d098aca3217b8f59c Mon Sep 17 00:00:00 2001 From: Barbara Rosiak Date: Tue, 18 Nov 2025 16:25:19 -0800 Subject: [PATCH 02/12] Fix markdown formatting --- docs/core/runtime-config/debugging-profiling.md | 4 +++- includes/coreclr-prefix.md | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index 2e3efee1ee90e..fc48f9cc4dc7a 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -41,16 +41,17 @@ This article details the settings you can use to configure .NET debugging and pr | **Environment variable** | `CORECLR_PROFILER` or `DOTNET_PROFILER` | *string-guid* | ## Profiler location + Once profiling is enabled, the profiler can be loaded in two ways, with environment variables (cross-plat) or through the registry (Windows only). ### Environment Variable (cross-plat) + - Specifies the path to the profiler DLL to load into the currently running process (or 32-bit or 64-bit process). - If more than one variable is set, the bitness-specific variables take precedence. They specify which bitness of profiler to load. - If any of these environment variables are present, the registry look up is skipped altogether, and the path from `DOTNET_PROFILER_PATH` is used to load the DLL. - When `DOTNET_PROFILER_PATH` is specified _and_ the profiler is registered, `DOTNET_PROFILER_PATH` always takes precedence. Even if `DOTNET_PROFILER_PATH` points to an invalid path, the runtime still uses `DOTNET_PROFILER_PATH`, and fails to load the profiler. - `DOTNET_PROFILER` is _always required_. When `DOTNET_PROFILER_PATH` is specified, the registry look up is skipped. The runtime still needs the profiler's CLSID (GUID) to pass it to the class factory's CreateInstance call. - | | Setting name | Values | | - | - | - | | **Environment variable** | `CORECLR_PROFILER_PATH` or `DOTNET_PROFILER_PATH` | *string-path* | @@ -60,6 +61,7 @@ Once profiling is enabled, the profiler can be loaded in two ways, with environm | **Environment variable** | `CORECLR_PROFILER_PATH_ARM64` or `DOTNET_PROFILER_PATH_ARM64` | *string-path* | ### Through the registry (Windows Only) + When the `DOTNET_PROFILER_PATH*` environment variables above are not set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. ## Export perf maps and jit dumps diff --git a/includes/coreclr-prefix.md b/includes/coreclr-prefix.md index 175907cf3981f..035c846e2492a 100644 --- a/includes/coreclr-prefix.md +++ b/includes/coreclr-prefix.md @@ -1,2 +1,2 @@ > [!NOTE] -> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and may be removed in the future. **Do not mix both conventions in a project** as this will result in errors. New projects should use the `DOTNET` prefix. \ No newline at end of file +> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and may be removed in the future. **Do not mix both conventions in a project** as this will result in errors. New projects should use the `DOTNET` prefix. From 8b36110cecc3bcc27ee2872bc43b8e6923e15806 Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:39:56 -0800 Subject: [PATCH 03/12] Rephrase environment variables precedence mention Co-authored-by: Noah Falk --- docs/core/runtime-config/debugging-profiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index fc48f9cc4dc7a..d98a32f42cc4e 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -42,7 +42,7 @@ This article details the settings you can use to configure .NET debugging and pr ## Profiler location -Once profiling is enabled, the profiler can be loaded in two ways, with environment variables (cross-plat) or through the registry (Windows only). +Once profiling is enabled, the profiler can be loaded in two ways, with environment variables (cross-plat) or through the registry (Windows only). The profiler path environment variables take precedence over any COM library path in the registry if both are specified. ### Environment Variable (cross-plat) From ab9c1957a8ca95df1b3c213a6979d9c47d3a7912 Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:42:04 -0800 Subject: [PATCH 04/12] Delete previous environment variables precedence mention Co-authored-by: Noah Falk --- docs/core/runtime-config/debugging-profiling.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index d98a32f42cc4e..8b90f198224a4 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -48,8 +48,6 @@ Once profiling is enabled, the profiler can be loaded in two ways, with environm - Specifies the path to the profiler DLL to load into the currently running process (or 32-bit or 64-bit process). - If more than one variable is set, the bitness-specific variables take precedence. They specify which bitness of profiler to load. -- If any of these environment variables are present, the registry look up is skipped altogether, and the path from `DOTNET_PROFILER_PATH` is used to load the DLL. -- When `DOTNET_PROFILER_PATH` is specified _and_ the profiler is registered, `DOTNET_PROFILER_PATH` always takes precedence. Even if `DOTNET_PROFILER_PATH` points to an invalid path, the runtime still uses `DOTNET_PROFILER_PATH`, and fails to load the profiler. - `DOTNET_PROFILER` is _always required_. When `DOTNET_PROFILER_PATH` is specified, the registry look up is skipped. The runtime still needs the profiler's CLSID (GUID) to pass it to the class factory's CreateInstance call. | | Setting name | Values | From 2fba8eee5e6678ad34e086a29344a032f38ceb2c Mon Sep 17 00:00:00 2001 From: Barbara Rosiak Date: Wed, 19 Nov 2025 16:53:52 -0800 Subject: [PATCH 05/12] Move profiling requirements description --- docs/core/runtime-config/debugging-profiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index 8b90f198224a4..af79133cd66bf 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -25,6 +25,7 @@ This article details the settings you can use to configure .NET debugging and pr - Configures whether profiling is enabled for the currently running process. - If you omit this setting, profiling is disabled. This is equivalent to setting the value to `0`. +- In addition to enabling profiling, the profiler GUID and profiler location also need to be configured using the settings below in order to load a profiler. | | Setting name | Values | | - | - | - | @@ -48,7 +49,6 @@ Once profiling is enabled, the profiler can be loaded in two ways, with environm - Specifies the path to the profiler DLL to load into the currently running process (or 32-bit or 64-bit process). - If more than one variable is set, the bitness-specific variables take precedence. They specify which bitness of profiler to load. -- `DOTNET_PROFILER` is _always required_. When `DOTNET_PROFILER_PATH` is specified, the registry look up is skipped. The runtime still needs the profiler's CLSID (GUID) to pass it to the class factory's CreateInstance call. | | Setting name | Values | | - | - | - | From d60ffa081c62cb940cb998dcfe2f6b196ebd8d3f Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:04:39 -0800 Subject: [PATCH 06/12] Update includes/coreclr-prefix.md Co-authored-by: Noah Falk --- includes/coreclr-prefix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/coreclr-prefix.md b/includes/coreclr-prefix.md index 035c846e2492a..8527bc2b1c201 100644 --- a/includes/coreclr-prefix.md +++ b/includes/coreclr-prefix.md @@ -1,2 +1,2 @@ > [!NOTE] -> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and may be removed in the future. **Do not mix both conventions in a project** as this will result in errors. New projects should use the `DOTNET` prefix. +> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and may be removed in the future. From 2f96621c8b69a7504bce3663ee4c9fa151acfb6a Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:12:44 -0800 Subject: [PATCH 07/12] Change headings to use sentence case Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/core/runtime-config/debugging-profiling.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index af79133cd66bf..dbbb34ca725d9 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -45,7 +45,7 @@ This article details the settings you can use to configure .NET debugging and pr Once profiling is enabled, the profiler can be loaded in two ways, with environment variables (cross-plat) or through the registry (Windows only). The profiler path environment variables take precedence over any COM library path in the registry if both are specified. -### Environment Variable (cross-plat) +### Environment variable (cross-plat) - Specifies the path to the profiler DLL to load into the currently running process (or 32-bit or 64-bit process). - If more than one variable is set, the bitness-specific variables take precedence. They specify which bitness of profiler to load. @@ -58,7 +58,7 @@ Once profiling is enabled, the profiler can be loaded in two ways, with environm | **Environment variable** | `CORECLR_PROFILER_PATH_ARM32` or `DOTNET_PROFILER_PATH_ARM32` | *string-path* | | **Environment variable** | `CORECLR_PROFILER_PATH_ARM64` or `DOTNET_PROFILER_PATH_ARM64` | *string-path* | -### Through the registry (Windows Only) +### Through the registry (Windows only) When the `DOTNET_PROFILER_PATH*` environment variables above are not set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. From a506c3a5092a03fffe5250d737f31823dab864b1 Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:16:10 -0800 Subject: [PATCH 08/12] Delete padding from a table Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/core/runtime-config/debugging-profiling.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index dbbb34ca725d9..e9d4e63ebb278 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -52,9 +52,9 @@ Once profiling is enabled, the profiler can be loaded in two ways, with environm | | Setting name | Values | | - | - | - | -| **Environment variable** | `CORECLR_PROFILER_PATH` or `DOTNET_PROFILER_PATH` | *string-path* | -| **Environment variable** | `CORECLR_PROFILER_PATH_32` or `DOTNET_PROFILER_PATH_32` | *string-path* | -| **Environment variable** | `CORECLR_PROFILER_PATH_64` or `DOTNET_PROFILER_PATH_64` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH` or `DOTNET_PROFILER_PATH` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_32` or `DOTNET_PROFILER_PATH_32` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_64` or `DOTNET_PROFILER_PATH_64` | *string-path* | | **Environment variable** | `CORECLR_PROFILER_PATH_ARM32` or `DOTNET_PROFILER_PATH_ARM32` | *string-path* | | **Environment variable** | `CORECLR_PROFILER_PATH_ARM64` or `DOTNET_PROFILER_PATH_ARM64` | *string-path* | From b32720e51db07543314b4776b2eabd7456d62356 Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Thu, 20 Nov 2025 12:18:08 -0800 Subject: [PATCH 09/12] Apply suggestions from code review Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- docs/core/runtime-config/debugging-profiling.md | 6 +++--- includes/coreclr-prefix.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index e9d4e63ebb278..ba77e47c4c1e6 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -25,7 +25,7 @@ This article details the settings you can use to configure .NET debugging and pr - Configures whether profiling is enabled for the currently running process. - If you omit this setting, profiling is disabled. This is equivalent to setting the value to `0`. -- In addition to enabling profiling, the profiler GUID and profiler location also need to be configured using the settings below in order to load a profiler. +- To load a profiler, in addition to enabling profiling, the profiler GUID and profiler location also need to be configured using these settings. | | Setting name | Values | | - | - | - | @@ -43,7 +43,7 @@ This article details the settings you can use to configure .NET debugging and pr ## Profiler location -Once profiling is enabled, the profiler can be loaded in two ways, with environment variables (cross-plat) or through the registry (Windows only). The profiler path environment variables take precedence over any COM library path in the registry if both are specified. +Once profiling is enabled, the profiler can be loaded in two ways: with environment variables (cross-plat) or through the registry (Windows only). The profiler path environment variables take precedence over any COM library path in the registry if both are specified. ### Environment variable (cross-plat) @@ -60,7 +60,7 @@ Once profiling is enabled, the profiler can be loaded in two ways, with environm ### Through the registry (Windows only) -When the `DOTNET_PROFILER_PATH*` environment variables above are not set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. +When the `DOTNET_PROFILER_PATH*` [environment variables](#environment-variable--cross-plat-) aren't set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. ## Export perf maps and jit dumps diff --git a/includes/coreclr-prefix.md b/includes/coreclr-prefix.md index 8527bc2b1c201..1185c7482708a 100644 --- a/includes/coreclr-prefix.md +++ b/includes/coreclr-prefix.md @@ -1,2 +1,2 @@ > [!NOTE] -> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and may be removed in the future. +> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and might be removed in the future. From be2ce0eecf214864bbc4116015729f67cc654f72 Mon Sep 17 00:00:00 2001 From: Barbara Rosiak Date: Thu, 20 Nov 2025 12:25:41 -0800 Subject: [PATCH 10/12] Inline coreclr prefix note --- docs/core/runtime-config/debugging-profiling.md | 3 ++- includes/coreclr-prefix.md | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 includes/coreclr-prefix.md diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index ba77e47c4c1e6..71fd18a16cc32 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -9,7 +9,8 @@ This article details the settings you can use to configure .NET debugging and pr [!INCLUDE [complus-prefix](../../../includes/complus-prefix.md)] -[!INCLUDE [coreclr-prefix](../../../includes/coreclr-prefix.md)] +> [!NOTE] +> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and might be removed in the future. ## Enable diagnostics diff --git a/includes/coreclr-prefix.md b/includes/coreclr-prefix.md deleted file mode 100644 index 1185c7482708a..0000000000000 --- a/includes/coreclr-prefix.md +++ /dev/null @@ -1,2 +0,0 @@ -> [!NOTE] -> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and might be removed in the future. From d8a8da5cca29ddea1263c966ca0dd57e69ecd336 Mon Sep 17 00:00:00 2001 From: Barbara Rosiak Date: Thu, 20 Nov 2025 12:28:06 -0800 Subject: [PATCH 11/12] Fix typo --- docs/core/runtime-config/debugging-profiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index 71fd18a16cc32..02cf1b917581d 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -61,7 +61,7 @@ Once profiling is enabled, the profiler can be loaded in two ways: with environm ### Through the registry (Windows only) -When the `DOTNET_PROFILER_PATH*` [environment variables](#environment-variable--cross-plat-) aren't set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. +When the `DOTNET_PROFILER_PATH*` [environment variables](#environment-variable-cross-plat-) aren't set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. ## Export perf maps and jit dumps From 95b064d7d13af6a2aa6659f3f6f32fa60d7ebbcc Mon Sep 17 00:00:00 2001 From: Barbara Rosiak Date: Thu, 20 Nov 2025 13:47:04 -0800 Subject: [PATCH 12/12] Fix typo --- docs/core/runtime-config/debugging-profiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index 02cf1b917581d..60f9de723910f 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -61,7 +61,7 @@ Once profiling is enabled, the profiler can be loaded in two ways: with environm ### Through the registry (Windows only) -When the `DOTNET_PROFILER_PATH*` [environment variables](#environment-variable-cross-plat-) aren't set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. +When the `DOTNET_PROFILER_PATH*` [environment variables](#environment-variable-cross-plat) aren't set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. ## Export perf maps and jit dumps