From 4a31b321bf3f2beb86d8717a6f4cce5d065b17cf Mon Sep 17 00:00:00 2001 From: Andrew Lock Date: Mon, 2 Sep 2024 12:02:52 +0100 Subject: [PATCH] [Exception Replay] Added test suite for ASP.NET Core (#5821 -> v2) (#5970) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added the infrastructure of integration testing for Exception Replay in ASP.NET Core. To add a test, one needs to simply create a class that inherits from `IRun` / `IAsyncRun` and decorated with `ExceptionReplayTestData` attribute, providing to the attribute the amount of snapshots anticipated both in default configuration and full stack trace capture configuration. This PR also introduces the renaming of the configs of Exception Replay from Exception Debugging. In the early days we used to call Exception Replay internally Exception Debugging, thus some of the configs held this name. This PR renamed those leftovers to Exception Replay, including the enablement config of `DD_EXCEPTION_REPLAY_ENABLED`. [Introduced a PR to `dd-go`](https://github.com/DataDog/dd-go/pull/146180) too where these configs were added to the `config_norm_rules.json` file. Laying the groundwork for integration testing of Exception Replay. The testing infra bootstraps the web app, queries via reflection all the tests (classes inheriting from `IRun`/`IAsyncRun` and decorated with `ExceptionReplayTestData` attribute) and list them. Upon executing a test, a request will hit an endpoint of `RunTest` with the name of the test to run (FQN of the class name). The crafted test must throw an exception to be considered valid. For a more complex test scenarios, more endpoints could be introduced. Every test runs in 4 flavors: - With Exception Replay while Dynamic Instrumentation is **enabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **enabled**, full stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, full stack trace capturing limit. This whole PR 🤓. I've added two tests that utilize the infra: - `ExceptionWithNonSupportedFramesTest` - `RecursiveExceptionTest` Fixes DEBUG-2681, DEBUG-2732, DEBUG-1642. Backport of https://github.com/DataDog/dd-trace-dotnet/pull/5821 Co-authored-by: Matan Green --- Datadog.Trace.Debugger.slnf | 1 + Datadog.Trace.sln | 99 + tracer/build/_build/Build.Steps.Debugger.cs | 18 + tracer/build/_build/Projects.cs | 1 + .../ClrProfiler/Instrumentation.cs | 2 +- .../ConfigurationKeys.Debugger.cs | 31 +- .../ExceptionCaseInstrumentationManager.cs | 15 +- .../ExceptionDebugging.cs | 6 +- .../ExceptionDebuggingProbe.cs | 7 +- .../ExceptionRelatedFrames.cs | 4 +- ...Settings.cs => ExceptionReplaySettings.cs} | 20 +- .../ExceptionTrackManager.cs | 21 +- .../Expressions/MethodScopeMembers.cs | 3 +- .../debugger_environment_variables.h | 5 +- .../debugger_environment_variables_util.cpp | 11 +- .../debugger_environment_variables_util.h | 2 +- ...ugger_probes_instrumentation_requester.cpp | 2 +- ...ionWithNonSupportedFramesTest.verified.txt | 38 + ...lStack.RecursiveExceptionTest.verified.txt | 122 + ...Replay.RecursiveExceptionTest.verified.txt | 26 + ...ionWithNonSupportedFramesTest.verified.txt | 743 ++ ...tCore5.RecursiveExceptionTest.verified.txt | 872 ++ .../ExceptionReplay.AspNetCore5.verified.txt | 982 +++ ...ionWithNonSupportedFramesTest.verified.txt | 1050 +++ ...tCore5.RecursiveExceptionTest.verified.txt | 3935 +++++++++ ...lay.FullCallStack.AspNetCore5.verified.txt | 7718 +++++++++++++++++ .../AspNetBase.cs | 126 + ...ionWithNonSupportedFramesTest.verified.txt | 29 + ...ionWithNonSupportedFramesTest.verified.txt | 38 + ...lStack.RecursiveExceptionTest.verified.txt | 122 + ...Replay.RecursiveExceptionTest.verified.txt | 26 + ...ionWithNonSupportedFramesTest.verified.txt | 29 + ...ionWithNonSupportedFramesTest.verified.txt | 38 + ...Replay.RecursiveExceptionTest.verified.txt | 12 + .../AspNetCore5ExceptionReplay.cs | 214 + .../Helpers/Approver.cs | 238 + .../ProbesTests.cs | 184 +- .../Telemetry/config_norm_rules.json | 5 + .../Controllers/HealthController.cs | 20 + .../Controllers/HomeController.cs | 96 + .../Samples.Debugger.AspNetCore5/Program.cs | 26 + .../Properties/launchSettings.json | 74 + .../Samples.Debugger.AspNetCore5.csproj | 130 + .../Samples.Debugger.AspNetCore5/Startup.cs | 76 + .../appsettings.Development.json | 9 + .../appsettings.json | 3 + .../Samples.Debugger.AspNetCore5/web.config | 29 + .../ExceptionWithNonSupportedFramesTest.cs | 33 + .../ExceptionReplay/RecursiveExceptionTest.cs | 37 + .../ExceptionReplayTestDataAttribute.cs | 22 + 50 files changed, 17133 insertions(+), 217 deletions(-) rename tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/{ExceptionDebuggingSettings.cs => ExceptionReplaySettings.cs} (74%) create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/AspNetBase.cs create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.cs create mode 100644 tracer/test/Datadog.Trace.Debugger.IntegrationTests/Helpers/Approver.cs create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HealthController.cs create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HomeController.cs create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Program.cs create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Properties/launchSettings.json create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Samples.Debugger.AspNetCore5.csproj create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Startup.cs create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.Development.json create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.json create mode 100644 tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/web.config create mode 100644 tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/ExceptionWithNonSupportedFramesTest.cs create mode 100644 tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/RecursiveExceptionTest.cs create mode 100644 tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplayTestDataAttribute.cs diff --git a/Datadog.Trace.Debugger.slnf b/Datadog.Trace.Debugger.slnf index 90a5ec585d6e..8fbb37a35803 100644 --- a/Datadog.Trace.Debugger.slnf +++ b/Datadog.Trace.Debugger.slnf @@ -20,6 +20,7 @@ "tracer\\test\\Datadog.Trace.TestHelpers\\Datadog.Trace.TestHelpers.csproj", "tracer\\test\\Datadog.Trace.Tests\\Datadog.Trace.Tests.csproj", "tracer\\test\\Datadog.Tracer.Native.Tests\\Datadog.Tracer.Native.Tests.vcxproj", + "tracer\\test\\test-applications\\debugger\\Samples.Debugger.AspNetCore5\\Samples.Debugger.AspNetCore5.csproj", "tracer\\test\\test-applications\\debugger\\Samples.Probes\\Samples.Probes.csproj", "tracer\\test\\test-applications\\debugger\\dependency-libs\\Samples.Probes.External\\Samples.Probes.External.csproj", "tracer\\test\\test-applications\\debugger\\dependency-libs\\Samples.Probes.TestRuns\\Samples.Probes.TestRuns.csproj", diff --git a/Datadog.Trace.sln b/Datadog.Trace.sln index 68cf6c17a62a..ceb8ae4cdbdb 100644 --- a/Datadog.Trace.sln +++ b/Datadog.Trace.sln @@ -572,6 +572,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.CIVisibilityVersion EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RuntimeMetricsShutdown", "tracer\test\test-applications\regression\RuntimeMetricsShutdown\RuntimeMetricsShutdown.csproj", "{C4ABF344-3263-45D5-A074-03FB206FF309}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Debugger.AspNetCore5", "tracer\test\test-applications\debugger\Samples.Debugger.AspNetCore5\Samples.Debugger.AspNetCore5.csproj", "{3978A7D5-7B6E-4152-9C3A-5852F1F6E223}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1372,6 +1374,10 @@ Global {C4ABF344-3263-45D5-A074-03FB206FF309}.Debug|Any CPU.Build.0 = Debug|Any CPU {C4ABF344-3263-45D5-A074-03FB206FF309}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4ABF344-3263-45D5-A074-03FB206FF309}.Release|Any CPU.Build.0 = Release|Any CPU + {3978A7D5-7B6E-4152-9C3A-5852F1F6E223}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3978A7D5-7B6E-4152-9C3A-5852F1F6E223}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3978A7D5-7B6E-4152-9C3A-5852F1F6E223}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3978A7D5-7B6E-4152-9C3A-5852F1F6E223}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1595,30 +1601,123 @@ Global {BA9613FB-8458-4C78-98DE-AA45BBE62F64} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A} {0D996EEE-7C04-4888-AF48-9C1E2F261A00} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A} {C4ABF344-3263-45D5-A074-03FB206FF309} = {498A300E-D036-49B7-A43D-821D1CAF11A5} + {3978A7D5-7B6E-4152-9C3A-5852F1F6E223} = {16427BFB-B4C6-46A9-A290-8EA51FF73FEA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {160A1D00-1F5B-40F8-A155-621B4459D78F} EndGlobalSection GlobalSection(SharedMSBuildProjectFiles) = preSolution + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{021efba6-c4ba-4de5-bf3f-c263ee9e20db}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{061ab58b-8235-4dae-8d56-5f081dd78f5e}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{086ff8a0-9cee-470a-9751-78b0f1340649}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{0980bcdd-a231-42d1-b689-41a41bba161a}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{0d996eee-7c04-4888-af48-9c1e2f261a00}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{0df4363a-0df4-4882-a39f-3c9f404b8de5}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{0e036453-2c80-4fc9-a517-771f0071734b}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{0f0f7d45-0e13-42b0-a158-8f303bbe8358}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{0f1d9fb5-4415-40f1-b7b0-6dd5a3bab0c4}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{10619ba2-aed1-482a-8570-bb7c7b83dddc}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{18a6904a-5afd-4816-ac3f-9f5e433720b5}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{1a5e9f40-f3a5-4b59-9898-3dcd65c459c3}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{1b3e6bee-f7ab-433e-a1d9-e8be3782419b}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{1b9e6bf4-9d48-4988-9945-248096119e46}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{230a9b80-e1aa-469f-86f2-b7e257f14e66}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{238f67db-1e48-447c-b1b8-bdc692103791}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{23ea38e3-0bf1-40df-a52d-c34ea2fb3f26}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{24834112-8c25-4a3d-bdd3-0acec825ff2c}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{25b7d571-c385-4ca6-9b6a-573d3e3ff3c9}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{268b6d05-b6d5-4d20-b2b1-0b9422a92d73}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{2a6d3042-c675-4ea3-a8e7-5bdd3c5758ea}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{2cc63aeb-0098-4d3b-9606-f07692c03e90}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{2d1ff937-3237-4a1b-9c6c-82fa5e22cad7}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{2f3b6271-b9a3-48a3-9db6-847f3ef41f0a}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{303f8e41-691f-4453-ab7d-88a0036c0465}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{31d192af-5454-4d91-97e1-889723aad309}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{32193a01-04dd-463b-a84a-9a93167958a4}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3493346b-44f6-4f50-8fb4-51d0090df544}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{34b67004-7249-4ef1-8e12-6e6da37ea6be}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3538ef5e-377e-430a-afb8-f2db5faede95}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3978a7d5-7b6e-4152-9c3a-5852f1f6e223}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3bc38be0-b6ff-4b05-bc63-3614a5cf9393}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3c6dd42e-9214-4747-92ba-78de29aace59}*SharedItemsImports = 4 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3c78c521-6507-4d3a-b92e-bc41cee9d9f3}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3cb0b2c2-7664-4d71-8f43-3d207ee80db7}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{3cdce3aa-7caf-4a27-b1d3-9d558b74d084}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{42fa33dd-aea3-4ff3-8319-f30244a666a4}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{43782238-e7bb-49d0-9541-1121daca6eb5}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{43c696fa-3812-4312-9529-98ceccd32a81}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{463a6fb2-1abe-4b92-a470-97134d0bbc7e}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{472b69a0-956f-42c0-9cb8-30107821c43b}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{472dba92-4fea-4b9a-ba70-0e97b942e12d}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{5a806f4b-39e7-4f38-b36f-f5cfc4f8760a}*SharedItemsImports = 13 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{65492dd4-ccd9-437a-b383-e7eb7ab872d2}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{65a66859-2735-4dd6-a927-b416b7a62d0f}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{662b587f-97b5-4cef-abf9-6c76a6dbd29e}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{69b678f6-51cf-4a5b-8dec-1f9cedc5c9e2}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{6c599d79-87d0-476b-9cba-f731e5627622}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{6d86109f-b7c9-477d-86d7-45735a3a0818}*SharedItemsImports = 4 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{6f38b456-1d16-4842-aee5-e74564fb506a}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{6f8b63ea-98d6-4909-be9e-f39029c29c4f}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{7203dd2b-739f-4223-ae50-d26a7feee1a4}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{73252693-2563-4b20-a2f5-f8db37b91dbe}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{7415b0fb-a446-41d6-a0cd-d64b703f15ad}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{7471a7a8-b89c-4c94-8eb1-24180e71ca1f}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{754f73e1-f7a4-47c7-a3f7-dc59ada5105a}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{79a63f25-a5f9-441c-8c52-f8033a9f8aba}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{7b0822f6-80de-4b49-8125-93975678d0d5}*SharedItemsImports = 4 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{7dfdd339-30c5-4c1d-ab07-f9106256af77}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{7e563bf6-47f2-4531-a1ce-fb9445df3253}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{8276e670-fc3f-4ede-9d51-6dad90336c32}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{83290961-40bf-48cb-b925-fbbe48e629f3}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{87d57940-9a6e-473c-a4d6-777e3bafd5f9}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{887ac8ba-35a6-4646-bf9a-59357155805e}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{8b457e8f-8716-4f29-bbe2-dd6c7bc4ac37}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{8bdf1de0-e6de-48ad-aaa3-ce09cb544e2c}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{8dfe1168-b1cc-43d1-b256-b5708badd47b}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{8e1555d1-13d5-4dbf-9631-117d840c3158}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{8eaabfb9-8a47-4b11-ad7f-ac8b373cde49}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{901ac4f9-7de5-4d13-85fd-384382e29f11}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{94b50277-fb50-4b42-ba79-770adb24cb80}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{95613224-c1d7-4d4a-8926-f70da26371ca}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{959e9599-8d99-43bc-8038-b91f76179c1c}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{99a62ccf-8e7f-4d57-8383-d38c371c8087}*SharedItemsImports = 4 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{b417e258-a21f-4546-b78f-8a7a4879472a}*SharedItemsImports = 4 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{b6a98887-4a47-4c19-9c6f-d833e24f4b1c}*SharedItemsImports = 4 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{b93ad901-b761-486d-80ae-443742db65e0}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{ba9613fb-8458-4c78-98de-aa45bbe62f64}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bb3f7d85-7e20-4aeb-a32a-8af150cc37b2}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bbad4449-d414-4a20-bca2-de9c40e4a866}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bbb60b0f-bf01-4499-936a-4a299a9acfd4}*SharedItemsImports = 4 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bc44a41f-1bed-4438-9f66-0ea5607906d5}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bc998acd-353b-4a56-8a56-df6200e141b6}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bd46efcc-177c-466e-81df-39314b780ada}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bdee131f-ccf5-49bd-9764-9c4a8864ce4e}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bed94a61-6fd9-4103-bd35-70b4798c301c}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{bf1e5ba6-c0e5-4472-9d5d-2622231dd275}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{c1210e08-58e5-44d4-be6f-634c3fc5e410}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{c41023c9-65c3-4fb3-9053-4de963a81500}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{c4abf344-3263-45d5-a074-03fb206ff309}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{cb56ac5a-d2c1-40de-99d5-dcf9f44c9482}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{d00ddbda-66f5-490d-8c1c-16cc5e142170}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{d141bd06-dd95-4caf-85cd-657116e0dad4}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{d59c5649-be0e-4a33-b868-b652d8614534}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{d79491f0-ca92-439b-98ce-7af9f57ebeb0}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{da0a44fb-d562-4776-aafb-8266e78aa1a6}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{da81ef3e-fdb3-417f-aa20-60fc495e3596}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{dc7d131a-af99-46ab-9aa6-463443e3b992}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{dd3e8ed8-a0e4-482e-a5ed-115e21d543c0}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{deacde01-95fe-4777-b70a-f20a96aabea7}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{e10243ae-34fc-47b5-b898-b5203c36920c}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{e961d189-3ef9-4d79-95a1-78d825b73b01}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{eea89acd-cfbb-4f60-a150-74f0a84df028}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{ef718502-7760-45b5-a563-5f1b22a6b840}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{f19b5109-36ac-4a64-afe6-faf9e831c528}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{f24eb026-65fb-4247-abf8-942b11adab64}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{f47f206e-4cca-4ad0-aeba-fd9f491e05ec}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{f5582f54-e911-4258-b419-5e894d338c5b}*SharedItemsImports = 4 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{f6a03b6c-ebf9-4581-9904-edc7270cf3bd}*SharedItemsImports = 5 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{fa487690-e88c-4a57-9187-b71cb70c1aae}*SharedItemsImports = 5 tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{fab2b108-e5be-4647-869b-1dc5d362252e}*SharedItemsImports = 4 + tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{ff2e8dd2-ca25-4d53-a77c-9f88e41f8c98}*SharedItemsImports = 5 EndGlobalSection EndGlobal diff --git a/tracer/build/_build/Build.Steps.Debugger.cs b/tracer/build/_build/Build.Steps.Debugger.cs index 29be0eecbd2b..fcc8e76b6532 100644 --- a/tracer/build/_build/Build.Steps.Debugger.cs +++ b/tracer/build/_build/Build.Steps.Debugger.cs @@ -1,3 +1,4 @@ +using System.Linq; using Nuke.Common; using Nuke.Common.ProjectModel; using Nuke.Common.Tooling; @@ -27,6 +28,8 @@ partial class Build Project DebuggerSamples => Solution.GetProject(Projects.DebuggerSamples); + Project ExceptionReplaySamples => Solution.GetProject(Projects.ExceptionReplaySamples); + Project DebuggerSamplesTestRuns => Solution.GetProject(Projects.DebuggerSamplesTestRuns); Project DebuggerUnreferencedExternal => Solution.GetProject(Projects.DebuggerUnreferencedExternal); @@ -68,6 +71,7 @@ partial class Build Target CompileDebuggerIntegrationTestsSamples => _ => _ .Unlisted() + .DependsOn(HackForMissingMsBuildLocation) .DependsOn(CompileDebuggerIntegrationTestsDependencies) .Requires(() => Framework) .Requires(() => MonitoringHomeDirectory != null) @@ -77,6 +81,11 @@ partial class Build { DotnetBuild(DebuggerSamples, framework: Framework); + if (ExceptionReplaySamples.TryGetTargetFrameworks().Contains(Framework)) + { + DotnetBuild(ExceptionReplaySamples, framework: Framework); + } + if (!IsWin) { // The sample helper in the test library assumes that the sample has @@ -86,6 +95,15 @@ partial class Build .SetConfiguration(BuildConfiguration) .SetNoWarnDotNetCore3() .SetProject(DebuggerSamples)); + + if (ExceptionReplaySamples.TryGetTargetFrameworks().Contains(Framework)) + { + DotNetPublish(x => x + .SetFramework(Framework) + .SetConfiguration(BuildConfiguration) + .SetNoWarnDotNetCore3() + .SetProject(ExceptionReplaySamples)); + } } }); diff --git a/tracer/build/_build/Projects.cs b/tracer/build/_build/Projects.cs index 60834d8db9c0..9e39b94d35a2 100644 --- a/tracer/build/_build/Projects.cs +++ b/tracer/build/_build/Projects.cs @@ -33,6 +33,7 @@ public static class Projects public const string DebuggerIntegrationTests = "Datadog.Trace.Debugger.IntegrationTests"; public const string DebuggerSamples = "Samples.Probes"; + public const string ExceptionReplaySamples = "Samples.Debugger.AspNetCore5"; public const string DebuggerSamplesTestRuns = "Samples.Probes.TestRuns"; public const string DebuggerUnreferencedExternal = "Samples.Probes.Unreferenced.External"; diff --git a/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs b/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs index 6b387f5a4ffc..8feb3024e712 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs @@ -449,7 +449,7 @@ private static void InitializeTracer(Stopwatch sw) } else { - Log.Information("Exception Debugging is disabled. To enable it, please set DD_EXCEPTION_DEBUGGING_ENABLED environment variable to 'true'."); + Log.Information("Exception Replay is disabled. To enable it, please set DD_EXCEPTION_REPLAY_ENABLED environment variable to '1'/'true'."); } } catch (Exception ex) diff --git a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Debugger.cs b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Debugger.cs index 6d749695f7bb..7e89af21fcb6 100644 --- a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Debugger.cs +++ b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Debugger.cs @@ -3,6 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. // +using System; using Datadog.Trace.Debugger; using Datadog.Trace.Debugger.ExceptionAutoInstrumentation; @@ -93,38 +94,46 @@ internal static class Debugger public const string RedactedTypes = "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES"; /// - /// Configuration key for enabling or disabling Exception Debugging. + /// The old configuration key for enabling or disabling Exception Replay. /// Default value is false (disabled). /// - /// + /// + [Obsolete] public const string ExceptionDebuggingEnabled = "DD_EXCEPTION_DEBUGGING_ENABLED"; + /// + /// Configuration key for enabling or disabling Exception Replay. + /// Default value is false (disabled). + /// + /// + public const string ExceptionReplayEnabled = "DD_EXCEPTION_REPLAY_ENABLED"; + /// /// Configuration key for the maximum number of frames in a call stack we would like to capture values for. /// - /// - public const string ExceptionDebuggingMaxFramesToCapture = "DD_EXCEPTION_DEBUGGING_MAX_FRAMES_TO_CAPTURE"; + /// + public const string ExceptionReplayMaxFramesToCapture = "DD_EXCEPTION_REPLAY_MAX_FRAMES_TO_CAPTURE"; /// /// Configuration key to enable capturing the variables of all the frames in exception call stack. /// Default value is false. /// - /// - public const string ExceptionDebuggingCaptureFullCallStackEnabled = "DD_EXCEPTION_DEBUGGING_CAPTURE_FULL_CALLSTACK_ENABLED"; + /// + public const string ExceptionReplayCaptureFullCallStackEnabled = "DD_EXCEPTION_REPLAY_CAPTURE_FULL_CALLSTACK_ENABLED"; /// /// Configuration key for the interval used to track exceptions /// Default value is 1h. /// - /// - public const string RateLimitSeconds = "DD_EXCEPTION_DEBUGGING_RATE_LIMIT_SECONDS"; + /// + public const string RateLimitSeconds = "DD_EXCEPTION_REPLAY_RATE_LIMIT_SECONDS"; /// - /// Configuration key for setting the maximum number of exceptions to be analyzed by Exception Debugging within a 1-second time interval. + /// Configuration key for setting the maximum number of exceptions to be analyzed by Exception Replay within a 1-second time interval. /// Default value is 100. /// - /// - public const string MaxExceptionAnalysisLimit = "DD_EXCEPTION_DEBUGGING_MAX_EXCEPTION_ANALYSIS_LIMIT"; + /// + public const string MaxExceptionAnalysisLimit = "DD_EXCEPTION_REPLAY_MAX_EXCEPTION_ANALYSIS_LIMIT"; } } } diff --git a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionCaseInstrumentationManager.cs b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionCaseInstrumentationManager.cs index cc2133524548..f6258a2f1ad7 100644 --- a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionCaseInstrumentationManager.cs +++ b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionCaseInstrumentationManager.cs @@ -115,7 +115,20 @@ private static List GetMethodsToRejit(ParticipatingFrame internal static void Revert(ExceptionCase @case) { - Log.Information("Reverting {ExceptionCase}", @case); + if (@case.Probes == null || @case.Processors == null) + { + Log.Information("Received empty @case, nothing to revert."); + return; + } + + try + { + Log.Information("Reverting {ExceptionCase}", @case); + } + catch (Exception ex) + { + Log.Error(ex, "Failed to log an exception case while reverting..."); + } foreach (var probe in @case.Probes) { diff --git a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebugging.cs b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebugging.cs index 2fa46773fa8c..fc1a04ffd9ca 100644 --- a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebugging.cs +++ b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebugging.cs @@ -21,16 +21,16 @@ internal class ExceptionDebugging { internal static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor(typeof(ExceptionDebugging)); - private static ExceptionDebuggingSettings? _settings; + private static ExceptionReplaySettings? _settings; private static int _firstInitialization = 1; private static bool _isDisabled; private static SnapshotUploader? _uploader; private static SnapshotSink? _snapshotSink; - public static ExceptionDebuggingSettings Settings + public static ExceptionReplaySettings Settings { - get => LazyInitializer.EnsureInitialized(ref _settings, ExceptionDebuggingSettings.FromDefaultSource)!; + get => LazyInitializer.EnsureInitialized(ref _settings, ExceptionReplaySettings.FromDefaultSource)!; private set => _settings = value; } diff --git a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingProbe.cs b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingProbe.cs index 7a655896cacd..74474d86e1e5 100644 --- a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingProbe.cs +++ b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingProbe.cs @@ -65,9 +65,14 @@ private bool ShouldInstrument() return false; } + /// + /// In .NET 6+ there's a bug that prevents Rejit-related APIs to work properly when Edit and Continue feature is turned on. + /// See https://github.com/dotnet/runtime/issues/91963 for addiitonal details. + /// private bool CheckIfMethodMayBeOmittedFromCallStack() { - return FrameworkDescription.Instance.IsCoreClr() && RuntimeHelper.IsNetOnward(6) && Method.Method.DeclaringType?.Assembly != null && RuntimeHelper.IsModuleDebugCompiled(Method.Method.DeclaringType.Assembly); + return ExceptionTrackManager.IsEditAndContinueFeatureEnabled && + FrameworkDescription.Instance.IsCoreClr() && RuntimeHelper.IsNetOnward(6) && Method.Method.DeclaringType?.Assembly != null && RuntimeHelper.IsModuleDebugCompiled(Method.Method.DeclaringType.Assembly); } private void ProcessCase(ExceptionCase @case) diff --git a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionRelatedFrames.cs b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionRelatedFrames.cs index e2cfce1537a3..dab333f07a3e 100644 --- a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionRelatedFrames.cs +++ b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionRelatedFrames.cs @@ -46,7 +46,7 @@ public virtual IEnumerable GetAllFlattenedFrames() // For reference, see the following test: ExceptionCaughtAndRethrownAsInnerTest. var firstFrame = Frames?.FirstOrDefault(); - var lastFrameOfInner = InnerFrame.Frames?.FirstOrDefault(); + var lastFrameOfInner = InnerFrame.Frames?.Reverse().FirstOrDefault(); var skipDuplicatedMethod = 0; if (lastFrameOfInner?.Method == firstFrame?.Method) @@ -54,7 +54,7 @@ public virtual IEnumerable GetAllFlattenedFrames() skipDuplicatedMethod = 1; } - foreach (var frame in InnerFrame.GetAllFlattenedFrames().Skip(skipDuplicatedMethod)) + foreach (var frame in InnerFrame.GetAllFlattenedFrames().Reverse().Skip(skipDuplicatedMethod).Reverse()) { yield return frame; } diff --git a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingSettings.cs b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionReplaySettings.cs similarity index 74% rename from tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingSettings.cs rename to tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionReplaySettings.cs index 332e81205c51..efb6cd7a2634 100644 --- a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionDebuggingSettings.cs +++ b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionReplaySettings.cs @@ -1,4 +1,4 @@ -// +// // Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. // @@ -15,23 +15,25 @@ namespace Datadog.Trace.Debugger.ExceptionAutoInstrumentation { - internal class ExceptionDebuggingSettings + internal class ExceptionReplaySettings { public const int DefaultMaxFramesToCapture = 4; public const int DefaultRateLimitSeconds = 60 * 60; // 1 hour public const int DefaultMaxExceptionAnalysisLimit = 100; - public ExceptionDebuggingSettings(IConfigurationSource? source, IConfigurationTelemetry telemetry) + public ExceptionReplaySettings(IConfigurationSource? source, IConfigurationTelemetry telemetry) { source ??= NullConfigurationSource.Instance; var config = new ConfigurationBuilder(source, telemetry); - Enabled = config.WithKeys(ConfigurationKeys.Debugger.ExceptionDebuggingEnabled).AsBool(false); +#pragma warning disable CS0612 // Type or member is obsolete + Enabled = config.WithKeys(ConfigurationKeys.Debugger.ExceptionDebuggingEnabled, ConfigurationKeys.Debugger.ExceptionReplayEnabled).AsBool(false); +#pragma warning restore CS0612 // Type or member is obsolete - CaptureFullCallStack = config.WithKeys(ConfigurationKeys.Debugger.ExceptionDebuggingCaptureFullCallStackEnabled).AsBool(false); + CaptureFullCallStack = config.WithKeys(ConfigurationKeys.Debugger.ExceptionReplayCaptureFullCallStackEnabled).AsBool(false); var maximumFramesToCapture = config - .WithKeys(ConfigurationKeys.Debugger.ExceptionDebuggingMaxFramesToCapture) + .WithKeys(ConfigurationKeys.Debugger.ExceptionReplayMaxFramesToCapture) .AsInt32(DefaultMaxFramesToCapture, maxDepth => maxDepth > 0) .Value; @@ -60,12 +62,12 @@ public ExceptionDebuggingSettings(IConfigurationSource? source, IConfigurationTe public int MaxExceptionAnalysisLimit { get; } - public static ExceptionDebuggingSettings FromSource(IConfigurationSource source, IConfigurationTelemetry telemetry) + public static ExceptionReplaySettings FromSource(IConfigurationSource source, IConfigurationTelemetry telemetry) { - return new ExceptionDebuggingSettings(source, telemetry); + return new ExceptionReplaySettings(source, telemetry); } - public static ExceptionDebuggingSettings FromDefaultSource() + public static ExceptionReplaySettings FromDefaultSource() { return FromSource(GlobalConfigurationSource.Instance, TelemetryFactory.Config); } diff --git a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionTrackManager.cs b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionTrackManager.cs index 413a95dcdfd6..159ca5a83b13 100644 --- a/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionTrackManager.cs +++ b/tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionTrackManager.cs @@ -20,6 +20,7 @@ using Datadog.Trace.Debugger.Snapshots; using Datadog.Trace.Debugger.Symbols; using Datadog.Trace.Logging; +using Datadog.Trace.Util; using Datadog.Trace.VendoredMicrosoftCode.System.Buffers; using Datadog.Trace.Vendors.Serilog.Events; using ProbeInfo = Datadog.Trace.Debugger.Expressions.ProbeInfo; @@ -45,6 +46,8 @@ internal class ExceptionTrackManager private static Task? _exceptionProcessorTask; private static bool _isInitialized; + internal static bool IsEditAndContinueFeatureEnabled { get; private set; } + private static async Task StartExceptionProcessingAsync(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) @@ -189,7 +192,7 @@ private static void ProcessException(Exception exception, int normalizedExHash, var exceptionTypes = new HashSet(); var currentFrame = allParticipatingFrames; - var iterationLimit = 5; + var iterationLimit = 10; while (iterationLimit-- >= 0 && currentFrame != null) { @@ -443,8 +446,8 @@ private static string GetNoCaptureReason(ParticipatingFrame frame, ExceptionDebu { if (probe.MayBeOmittedFromCallStack) { - // Frame is non-optimized in .NET 6+. - noCaptureReason = $"The method {frame.Method.GetFullyQualifiedName()} could not be captured because it resides in a module that is not optimized. In .NET 6 and later versions, the code must be compiled with optimizations enabled."; + // The process is spawned with `COMPLUS_ForceEnc` & the module of the method is non-optimized. + noCaptureReason = $"The method {frame.Method.GetFullyQualifiedName()} could not be captured because the process is spawned with Edit and Continue feature turned on and the module is compiled as Debug. Set the environment variable `COMPLUS_ForceEnc` to `0`. For further info, visit: https://github.com/dotnet/runtime/issues/91963."; } else if (probe.ProbeStatus == Status.ERROR) { @@ -522,10 +525,20 @@ public static void Initialize() _exceptionProcessorTask = Task.Factory.StartNew( async () => await StartExceptionProcessingAsync(Cts.Token).ConfigureAwait(false), TaskCreationOptions.LongRunning) .Unwrap(); - + IsEditAndContinueFeatureEnabled = IsEnCFeatureEnabled(); _isInitialized = true; } + /// + /// In .NET 6+ there's a bug that prevents Rejit-related APIs to work properly when Edit and Continue feature is turned on. + /// See https://github.com/dotnet/runtime/issues/91963 for additional details. + /// + private static bool IsEnCFeatureEnabled() + { + var encEnabled = EnvironmentHelpers.GetEnvironmentVariable("COMPLUS_ForceEnc"); + return !string.IsNullOrEmpty(encEnabled) && (encEnabled == "1" || encEnabled == "true"); + } + public static bool IsSupportedExceptionType(Type ex) => ex != typeof(BadImageFormatException) && ex != typeof(InvalidProgramException) && diff --git a/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs b/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs index 637a86e3ccde..9f9fdb4bbbff 100644 --- a/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs +++ b/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs @@ -23,6 +23,7 @@ internal MethodScopeMembers(int numberOfLocals, int numberOfArguments) } Members = ArrayPool.Shared.Rent(_initialSize); + Array.Clear(Members, 0, Members.Length); Exception = null; Return = default; InvocationTarget = default; @@ -55,7 +56,7 @@ internal void Dispose() { if (Members != null) { - ArrayPool.Shared.Return(Members, false); + ArrayPool.Shared.Return(Members); } } } diff --git a/tracer/src/Datadog.Tracer.Native/debugger_environment_variables.h b/tracer/src/Datadog.Tracer.Native/debugger_environment_variables.h index bca4c01c02ec..6ce73c39e589 100644 --- a/tracer/src/Datadog.Tracer.Native/debugger_environment_variables.h +++ b/tracer/src/Datadog.Tracer.Native/debugger_environment_variables.h @@ -17,8 +17,9 @@ namespace environment // Determines if the Dynamic Instrumentation (aka live debugger) is enabled. const WSTRING debugger_enabled = WStr("DD_DYNAMIC_INSTRUMENTATION_ENABLED"); - // Determines if the Exception Debugging product is enabled. - const WSTRING exception_debugging_enabled = WStr("DD_EXCEPTION_DEBUGGING_ENABLED"); + // Determines if the Exception Replay product is enabled. + const WSTRING exception_debugging_enabled = WStr("DD_EXCEPTION_DEBUGGING_ENABLED"); // Old name + const WSTRING exception_replay_enabled = WStr("DD_EXCEPTION_REPLAY_ENABLED"); } // namespace environment } // namespace debugger diff --git a/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.cpp b/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.cpp index e6689a54f7d3..252c73de7b2e 100644 --- a/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.cpp +++ b/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.cpp @@ -9,9 +9,16 @@ bool IsDebuggerEnabled() CheckIfTrue(GetEnvironmentValue(environment::debugger_enabled)); } -bool IsExceptionDebuggingEnabled() +bool IsExceptionReplayEnabled() { - CheckIfTrue(GetEnvironmentValue(environment::exception_debugging_enabled)); + static int sValue = -1; + if (sValue == -1) + { + const auto old_exception_replay_flag = GetEnvironmentValue(environment::exception_debugging_enabled); + const auto new_exception_replay_flag = GetEnvironmentValue(environment::exception_replay_enabled); + sValue = (IsTrue(old_exception_replay_flag) || IsTrue(new_exception_replay_flag)) ? 1 : 0; + } + return sValue == 1; } bool IsDebuggerInstrumentAllEnabled() diff --git a/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.h b/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.h index 66eb270c66bf..56381a106154 100644 --- a/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.h +++ b/tracer/src/Datadog.Tracer.Native/debugger_environment_variables_util.h @@ -9,7 +9,7 @@ namespace debugger { bool IsDebuggerEnabled(); -bool IsExceptionDebuggingEnabled(); +bool IsExceptionReplayEnabled(); bool IsDebuggerInstrumentAllEnabled(); } // namespace debugger diff --git a/tracer/src/Datadog.Tracer.Native/debugger_probes_instrumentation_requester.cpp b/tracer/src/Datadog.Tracer.Native/debugger_probes_instrumentation_requester.cpp index c3dcf4ee5bad..654d45992714 100644 --- a/tracer/src/Datadog.Tracer.Native/debugger_probes_instrumentation_requester.cpp +++ b/tracer/src/Datadog.Tracer.Native/debugger_probes_instrumentation_requester.cpp @@ -197,7 +197,7 @@ DebuggerProbesInstrumentationRequester::DebuggerProbesInstrumentationRequester( m_work_offloader(work_offloader), m_fault_tolerant_method_duplicator(fault_tolerant_method_duplicator) { - is_debugger_or_exception_debugging_enabled = IsDebuggerEnabled() || IsExceptionDebuggingEnabled(); + is_debugger_or_exception_debugging_enabled = IsDebuggerEnabled() || IsExceptionReplayEnabled(); } void DebuggerProbesInstrumentationRequester::RemoveProbes(debugger::DebuggerRemoveProbesDefinition* removeProbes, diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..ab91ba9ff811 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,38 @@ +Iteration 0: + _dd.di._eh : -1268833861 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.0.frame_data.function : SupportedFrame + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.1.frame_data.function : NotSupportedFrame + _dd.debug.error.1.no_capture_reason : The method NotSupportedFrame_Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.NotSupportedFrame(String str) has failed in instrumentation. Failure reason: Dynamic Instrumentation of methods that return a `ref struct` is not yet supported. + _dd.debug.error.10.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.10.frame_data.function : InvokeInnerFilterAsync + _dd.debug.error.10.no_capture_reason : The method InvokeInnerFilterAsync_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() is blacklisted. + _dd.debug.error.2.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.2.frame_data.function : Run + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__6 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.4.frame_data.class_name : d__5 + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.snapshot_id : + _dd.debug.error.8.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.8.frame_data.function : Rethrow + _dd.debug.error.8.no_capture_reason : The method Rethrow_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) is blacklisted. + _dd.debug.error.9.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.9.frame_data.function : Next + _dd.debug.error.9.no_capture_reason : The method Next_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) is blacklisted. + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -1268833861 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..86181c5f317e --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt @@ -0,0 +1,122 @@ +Iteration 0: + _dd.di._eh : -362102791 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : d__1 + _dd.debug.error.0.frame_data.function : MoveNext + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : <b__1_0>d + _dd.debug.error.1.frame_data.function : MoveNext + _dd.debug.error.1.snapshot_id : + _dd.debug.error.10.frame_data.class_name : <b__1_0>d + _dd.debug.error.10.frame_data.function : MoveNext + _dd.debug.error.10.snapshot_id : + _dd.debug.error.11.frame_data.class_name : d__0 + _dd.debug.error.11.frame_data.function : MoveNext + _dd.debug.error.11.snapshot_id : + _dd.debug.error.12.frame_data.class_name : d__1 + _dd.debug.error.12.frame_data.function : MoveNext + _dd.debug.error.12.snapshot_id : + _dd.debug.error.13.frame_data.class_name : <b__1_0>d + _dd.debug.error.13.frame_data.function : MoveNext + _dd.debug.error.13.snapshot_id : + _dd.debug.error.14.frame_data.class_name : d__0 + _dd.debug.error.14.frame_data.function : MoveNext + _dd.debug.error.14.snapshot_id : + _dd.debug.error.15.frame_data.class_name : d__1 + _dd.debug.error.15.frame_data.function : MoveNext + _dd.debug.error.15.snapshot_id : + _dd.debug.error.16.frame_data.class_name : <b__1_0>d + _dd.debug.error.16.frame_data.function : MoveNext + _dd.debug.error.16.snapshot_id : + _dd.debug.error.17.frame_data.class_name : d__0 + _dd.debug.error.17.frame_data.function : MoveNext + _dd.debug.error.17.snapshot_id : + _dd.debug.error.18.frame_data.class_name : d__1 + _dd.debug.error.18.frame_data.function : MoveNext + _dd.debug.error.18.snapshot_id : + _dd.debug.error.19.frame_data.class_name : <b__1_0>d + _dd.debug.error.19.frame_data.function : MoveNext + _dd.debug.error.19.snapshot_id : + _dd.debug.error.2.frame_data.class_name : d__0 + _dd.debug.error.2.frame_data.function : MoveNext + _dd.debug.error.2.snapshot_id : + _dd.debug.error.20.frame_data.class_name : d__0 + _dd.debug.error.20.frame_data.function : MoveNext + _dd.debug.error.20.snapshot_id : + _dd.debug.error.21.frame_data.class_name : d__1 + _dd.debug.error.21.frame_data.function : MoveNext + _dd.debug.error.21.snapshot_id : + _dd.debug.error.22.frame_data.class_name : <b__1_0>d + _dd.debug.error.22.frame_data.function : MoveNext + _dd.debug.error.22.snapshot_id : + _dd.debug.error.23.frame_data.class_name : d__0 + _dd.debug.error.23.frame_data.function : MoveNext + _dd.debug.error.23.snapshot_id : + _dd.debug.error.24.frame_data.class_name : d__1 + _dd.debug.error.24.frame_data.function : MoveNext + _dd.debug.error.24.snapshot_id : + _dd.debug.error.25.frame_data.class_name : <b__1_0>d + _dd.debug.error.25.frame_data.function : MoveNext + _dd.debug.error.25.snapshot_id : + _dd.debug.error.26.frame_data.class_name : d__0 + _dd.debug.error.26.frame_data.function : MoveNext + _dd.debug.error.26.snapshot_id : + _dd.debug.error.27.frame_data.class_name : d__1 + _dd.debug.error.27.frame_data.function : MoveNext + _dd.debug.error.27.snapshot_id : + _dd.debug.error.28.frame_data.class_name : <b__1_0>d + _dd.debug.error.28.frame_data.function : MoveNext + _dd.debug.error.28.snapshot_id : + _dd.debug.error.29.frame_data.class_name : d__0 + _dd.debug.error.29.frame_data.function : MoveNext + _dd.debug.error.29.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__1 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.30.frame_data.class_name : d__1 + _dd.debug.error.30.frame_data.function : MoveNext + _dd.debug.error.30.snapshot_id : + _dd.debug.error.31.frame_data.class_name : d__0 + _dd.debug.error.31.frame_data.function : MoveNext + _dd.debug.error.31.snapshot_id : + _dd.debug.error.32.frame_data.class_name : d__6 + _dd.debug.error.32.frame_data.function : MoveNext + _dd.debug.error.32.snapshot_id : + _dd.debug.error.33.frame_data.class_name : d__5 + _dd.debug.error.33.frame_data.function : MoveNext + _dd.debug.error.33.snapshot_id : + _dd.debug.error.37.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.37.frame_data.function : Rethrow + _dd.debug.error.37.no_capture_reason : The method Rethrow_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) is blacklisted. + _dd.debug.error.38.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.38.frame_data.function : Next + _dd.debug.error.38.no_capture_reason : The method Next_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) is blacklisted. + _dd.debug.error.4.frame_data.class_name : <b__1_0>d + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.snapshot_id : + _dd.debug.error.5.frame_data.class_name : d__0 + _dd.debug.error.5.frame_data.function : MoveNext + _dd.debug.error.5.snapshot_id : + _dd.debug.error.6.frame_data.class_name : d__1 + _dd.debug.error.6.frame_data.function : MoveNext + _dd.debug.error.6.snapshot_id : + _dd.debug.error.7.frame_data.class_name : <b__1_0>d + _dd.debug.error.7.frame_data.function : MoveNext + _dd.debug.error.7.snapshot_id : + _dd.debug.error.8.frame_data.class_name : d__0 + _dd.debug.error.8.frame_data.function : MoveNext + _dd.debug.error.8.snapshot_id : + _dd.debug.error.9.frame_data.class_name : d__1 + _dd.debug.error.9.frame_data.function : MoveNext + _dd.debug.error.9.snapshot_id : + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -362102791 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..c60a341e43e7 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt @@ -0,0 +1,26 @@ +Iteration 0: + _dd.di._eh : -362102791 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : d__1 + _dd.debug.error.0.frame_data.function : MoveNext + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : <b__1_0>d + _dd.debug.error.1.frame_data.function : MoveNext + _dd.debug.error.1.snapshot_id : + _dd.debug.error.2.frame_data.class_name : d__0 + _dd.debug.error.2.frame_data.function : MoveNext + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__1 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -362102791 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..84bb3cc78d12 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,743 @@ +[ + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "fields": { + "Cache": { + "fields": { + "Authentication": { + "isNull": "true", + "type": "IHttpAuthenticationFeature" + }, + "Lifetime": { + "isNull": "true", + "type": "IHttpRequestLifetimeFeature" + }, + "RequestIdentifier": { + "isNull": "true", + "type": "IHttpRequestIdentifierFeature" + }, + "ServiceProviders": { + "notCapturedReason": "depth", + "type": "IServiceProvidersFeature", + "value": "IServiceProvidersFeature" + }, + "Session": { + "notCapturedReason": "redactedIdent", + "type": "ISessionFeature" + } + }, + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "RouteValues": { + "isNull": "true", + "type": "RouteValueDictionary" + } + }, + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + } + }, + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "fields": { + "BufferBody": { + "type": "Boolean", + "value": "False" + }, + "BufferBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "KeyLengthLimit": { + "type": "Int32", + "value": "2048" + }, + "MemoryBufferThreshold": { + "type": "Int32", + "value": "65536" + }, + "MultipartBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "MultipartBoundaryLengthLimit": { + "type": "Int32", + "value": "128" + }, + "MultipartHeadersCountLimit": { + "type": "Int32", + "value": "16" + }, + "MultipartHeadersLengthLimit": { + "type": "Int32", + "value": "16384" + }, + "ValueCountLimit": { + "type": "Int32", + "value": "1024" + }, + "ValueLengthLimit": { + "type": "Int32", + "value": "4194304" + } + }, + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "next": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`1", + "value": "Func`1" + }, + "this": { + "type": "<>c", + "value": "<>c" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "staticFields": { + "<>9": { + "type": "<>c", + "value": "<>c" + }, + "<>9__5_0": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_1": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_2": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`3", + "value": "Func`3" + }, + "<>9__5_3": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_4": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "RequestDelegate", + "value": "RequestDelegate" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_2", + "type": "Samples.Debugger.AspNetCore5.Startup+<>c" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_2", + "name": "Samples.Debugger.AspNetCore5.Startup+<>c", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "instance": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "testClassName": { + "type": "String", + "value": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "RunTest", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "RunTest", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "str": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "this": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "SupportedFrame", + "type": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "SupportedFrame", + "name": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "this": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Run", + "type": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Run", + "name": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + } +] \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..2b1f780f3b4b --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.RecursiveExceptionTest.verified.txt @@ -0,0 +1,872 @@ +[ + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "fields": { + "Cache": { + "fields": { + "Authentication": { + "isNull": "true", + "type": "IHttpAuthenticationFeature" + }, + "Lifetime": { + "isNull": "true", + "type": "IHttpRequestLifetimeFeature" + }, + "RequestIdentifier": { + "isNull": "true", + "type": "IHttpRequestIdentifierFeature" + }, + "ServiceProviders": { + "notCapturedReason": "depth", + "type": "IServiceProvidersFeature", + "value": "IServiceProvidersFeature" + }, + "Session": { + "notCapturedReason": "redactedIdent", + "type": "ISessionFeature" + } + }, + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "RouteValues": { + "isNull": "true", + "type": "RouteValueDictionary" + } + }, + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + } + }, + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "fields": { + "BufferBody": { + "type": "Boolean", + "value": "False" + }, + "BufferBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "KeyLengthLimit": { + "type": "Int32", + "value": "2048" + }, + "MemoryBufferThreshold": { + "type": "Int32", + "value": "65536" + }, + "MultipartBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "MultipartBoundaryLengthLimit": { + "type": "Int32", + "value": "128" + }, + "MultipartHeadersCountLimit": { + "type": "Int32", + "value": "16" + }, + "MultipartHeadersLengthLimit": { + "type": "Int32", + "value": "16384" + }, + "ValueCountLimit": { + "type": "Int32", + "value": "1024" + }, + "ValueLengthLimit": { + "type": "Int32", + "value": "4194304" + } + }, + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "next": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`1", + "value": "Func`1" + }, + "this": { + "type": "<>c", + "value": "<>c" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "staticFields": { + "<>9": { + "type": "<>c", + "value": "<>c" + }, + "<>9__5_0": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_1": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_2": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`3", + "value": "Func`3" + }, + "<>9__5_3": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_4": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "RequestDelegate", + "value": "RequestDelegate" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_2", + "type": "Samples.Debugger.AspNetCore5.Startup+<>c" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_2", + "name": "Samples.Debugger.AspNetCore5.Startup+<>c", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "0" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "1" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + } +] \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.verified.txt new file mode 100644 index 000000000000..6d633dd0e9b0 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.AspNetCore5.verified.txt @@ -0,0 +1,982 @@ +[ + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "0" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "next": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`1", + "value": "Func`1" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "staticFields": { + "<>9": { + "type": "<>c", + "value": "<>c" + }, + "<>9__5_0": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_1": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_2": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`3", + "value": "Func`3" + }, + "<>9__5_3": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_4": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "RequestDelegate", + "value": "RequestDelegate" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_2", + "type": "Samples.Debugger.AspNetCore5.Startup+<>c" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_2", + "name": "Samples.Debugger.AspNetCore5.Startup+<>c", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + } +] \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..9b5573ac0836 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,1050 @@ +[ + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "fields": { + "Cache": { + "fields": { + "Authentication": { + "isNull": "true", + "type": "IHttpAuthenticationFeature" + }, + "Lifetime": { + "isNull": "true", + "type": "IHttpRequestLifetimeFeature" + }, + "RequestIdentifier": { + "isNull": "true", + "type": "IHttpRequestIdentifierFeature" + }, + "ServiceProviders": { + "notCapturedReason": "depth", + "type": "IServiceProvidersFeature", + "value": "IServiceProvidersFeature" + }, + "Session": { + "notCapturedReason": "redactedIdent", + "type": "ISessionFeature" + } + }, + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "RouteValues": { + "isNull": "true", + "type": "RouteValueDictionary" + } + }, + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + } + }, + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "fields": { + "BufferBody": { + "type": "Boolean", + "value": "False" + }, + "BufferBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "KeyLengthLimit": { + "type": "Int32", + "value": "2048" + }, + "MemoryBufferThreshold": { + "type": "Int32", + "value": "65536" + }, + "MultipartBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "MultipartBoundaryLengthLimit": { + "type": "Int32", + "value": "128" + }, + "MultipartHeadersCountLimit": { + "type": "Int32", + "value": "16" + }, + "MultipartHeadersLengthLimit": { + "type": "Int32", + "value": "16384" + }, + "ValueCountLimit": { + "type": "Int32", + "value": "1024" + }, + "ValueLengthLimit": { + "type": "Int32", + "value": "4194304" + } + }, + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "next": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`1", + "value": "Func`1" + }, + "this": { + "type": "<>c", + "value": "<>c" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "staticFields": { + "<>9": { + "type": "<>c", + "value": "<>c" + }, + "<>9__5_0": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_1": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_2": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`3", + "value": "Func`3" + }, + "<>9__5_3": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_4": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "RequestDelegate", + "value": "RequestDelegate" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_2", + "type": "Samples.Debugger.AspNetCore5.Startup+<>c" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_2", + "name": "Samples.Debugger.AspNetCore5.Startup+<>c", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "instance": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "testClassName": { + "type": "String", + "value": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "RunTest", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "RunTest", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "str": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "this": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "SupportedFrame", + "type": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "SupportedFrame", + "name": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "testName": { + "type": "String", + "value": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.RunTest (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "DebuggerStepThroughAttribute", + "value": "DebuggerStepThroughAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 5, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "RunTest" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + }, + "instance": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "RunTest", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "RunTest", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "this": { + "type": "ExceptionWithNonSupportedFramesTest", + "value": "ExceptionWithNonSupportedFramesTest" + } + }, + "locals": { + "@exception": { + "fields": { + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233079" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "ExceptionWithNonSupportedFramesTest" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "InvalidOperationException", + "value": "InvalidOperationException" + } + }, + "throwable": { + "message": "ExceptionWithNonSupportedFramesTest", + "stacktrace": [ + { + "function": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.SupportedFrame", + "lineNumber": "ScrubbedValue" + } + ], + "type": "System.InvalidOperationException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Run", + "type": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Run", + "name": "Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + } +] \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..893fa979f28e --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.RecursiveExceptionTest.verified.txt @@ -0,0 +1,3935 @@ +[ + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "fields": { + "Cache": { + "fields": { + "Authentication": { + "isNull": "true", + "type": "IHttpAuthenticationFeature" + }, + "Lifetime": { + "isNull": "true", + "type": "IHttpRequestLifetimeFeature" + }, + "RequestIdentifier": { + "isNull": "true", + "type": "IHttpRequestIdentifierFeature" + }, + "ServiceProviders": { + "notCapturedReason": "depth", + "type": "IServiceProvidersFeature", + "value": "IServiceProvidersFeature" + }, + "Session": { + "notCapturedReason": "redactedIdent", + "type": "ISessionFeature" + } + }, + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "RouteValues": { + "isNull": "true", + "type": "RouteValueDictionary" + } + }, + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "fields": { + "_context": { + "fields": { + "_connection": { + "isNull": "true", + "type": "DefaultConnectionInfo" + }, + "_features": { + "notCapturedReason": "depth", + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + }, + "_request": { + "notCapturedReason": "depth", + "type": "DefaultHttpRequest", + "value": "DefaultHttpRequest" + }, + "_response": { + "notCapturedReason": "depth", + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "notCapturedReason": "depth", + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "notCapturedReason": "depth", + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "_features": { + "fields": { + "Cache": { + "notCapturedReason": "depth", + "type": "FeatureInterfaces", + "value": "FeatureInterfaces" + }, + "Collection": { + "notCapturedReason": "depth", + "type": "IFeatureCollection", + "value": "IFeatureCollection" + } + }, + "type": "FeatureReferences`1", + "value": "FeatureReferences`1" + } + }, + "type": "DefaultHttpResponse", + "value": "DefaultHttpResponse" + }, + "_websockets": { + "isNull": "true", + "type": "DefaultWebSocketManager" + }, + "FormOptions": { + "fields": { + "BufferBody": { + "type": "Boolean", + "value": "False" + }, + "BufferBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "KeyLengthLimit": { + "type": "Int32", + "value": "2048" + }, + "MemoryBufferThreshold": { + "type": "Int32", + "value": "65536" + }, + "MultipartBodyLengthLimit": { + "type": "Int64", + "value": "134217728" + }, + "MultipartBoundaryLengthLimit": { + "type": "Int32", + "value": "128" + }, + "MultipartHeadersCountLimit": { + "type": "Int32", + "value": "16" + }, + "MultipartHeadersLengthLimit": { + "type": "Int32", + "value": "16384" + }, + "ValueCountLimit": { + "type": "Int32", + "value": "1024" + }, + "ValueLengthLimit": { + "type": "Int32", + "value": "4194304" + } + }, + "type": "FormOptions", + "value": "FormOptions" + }, + "ServiceScopeFactory": { + "type": "IServiceScopeFactory", + "value": "IServiceScopeFactory" + } + }, + "type": "DefaultHttpContext", + "value": "DefaultHttpContext" + }, + "next": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`1", + "value": "Func`1" + }, + "this": { + "type": "<>c", + "value": "<>c" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "staticFields": { + "<>9": { + "type": "<>c", + "value": "<>c" + }, + "<>9__5_0": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_1": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_2": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`3", + "value": "Func`3" + }, + "<>9__5_3": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_4": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "RequestDelegate", + "value": "RequestDelegate" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_2", + "type": "Samples.Debugger.AspNetCore5.Startup+<>c" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_2", + "name": "Samples.Debugger.AspNetCore5.Startup+<>c", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "instance": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + }, + "testClassName": { + "type": "String", + "value": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "RunTest", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "RunTest", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "1" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "1" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "2" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "2" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "3" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "3" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "4" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "4" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "5" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "5" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "6" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "6" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "7" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "7" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "8" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "8" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "9" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "9" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__1_0", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__1_0", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "0" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "1" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "10" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "2" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "3" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "4" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "5" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "6" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "7" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "8" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "9" + }, + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "testName": { + "type": "String", + "value": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.RunTest (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "DebuggerStepThroughAttribute", + "value": "DebuggerStepThroughAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 5, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "RunTest" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + }, + "instance": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "RunTest", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "RunTest", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "this": { + "type": "RecursiveExceptionTest", + "value": "RecursiveExceptionTest" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Probes.TestRuns" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "RunAsync", + "type": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "RunAsync", + "name": "Samples.Probes.TestRuns.ExceptionReplay.RecursiveExceptionTest", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + } +] \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.verified.txt new file mode 100644 index 000000000000..be0541fbe4f3 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Approvals/snapshots/ExceptionReplay.FullCallStack.AspNetCore5.verified.txt @@ -0,0 +1,7718 @@ +[ + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "0" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "1" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "1" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "2" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "2" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "3" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "3" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "4" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "4" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "5" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "5" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "6" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "6" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "7" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "7" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "8" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "8" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "9" + }, + "method": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`2", + "value": "Func`2" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Me", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Me", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController+PingPonged", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iteration": { + "type": "Int32", + "value": "9" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_0", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_0", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "0" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "1" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "10" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "2" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "3" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "4" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "5" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "6" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "7" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "8" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "iterations": { + "type": "Int32", + "value": "9" + }, + "this": { + "fields": { + "_controllerContext": { + "fields": { + "_valueProviderFactories": { + "type": "IList`1", + "value": "IList`1" + }, + "ActionDescriptor": { + "fields": { + "ActionConstraints": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "HttpMethodActionConstraint", + "value": "HttpMethodActionConstraint" + } + ], + "size": 1, + "type": "IList`1" + }, + "AttributeRouteInfo": { + "notCapturedReason": "depth", + "type": "AttributeRouteInfo", + "value": "AttributeRouteInfo" + }, + "BoundProperties": { + "elements": [], + "size": 0, + "type": "IList`1" + }, + "DisplayName": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5.Controllers.HomeController.Recursive (Samples.Debugger.AspNetCore5)" + }, + "EndpointMetadata": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerAttribute", + "value": "ControllerAttribute" + }, + { + "notCapturedReason": "depth", + "type": "AsyncStateMachineAttribute", + "value": "AsyncStateMachineAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpGetAttribute", + "value": "HttpGetAttribute" + }, + { + "notCapturedReason": "depth", + "type": "HttpMethodMetadata", + "value": "HttpMethodMetadata" + } + ], + "size": 4, + "type": "IList`1" + }, + "FilterDescriptors": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + }, + { + "notCapturedReason": "depth", + "type": "FilterDescriptor", + "value": "FilterDescriptor" + } + ], + "size": 2, + "type": "IList`1" + }, + "Id": "ScrubbedValue", + "Parameters": { + "elements": [ + { + "notCapturedReason": "depth", + "type": "ControllerParameterDescriptor", + "value": "ControllerParameterDescriptor" + } + ], + "size": 1, + "type": "IList`1" + }, + "Properties": { + "entries": [], + "size": 0, + "type": "IDictionary`2" + }, + "RouteValues": { + "entries": [ + [ + { + "type": "String", + "value": "action" + }, + { + "type": "String", + "value": "Recursive" + } + ], + [ + { + "type": "String", + "value": "controller" + }, + { + "type": "String", + "value": "Home" + } + ] + ], + "size": 2, + "type": "IDictionary`2" + } + }, + "type": "ActionDescriptor", + "value": "ActionDescriptor" + }, + "HttpContext": { + "type": "HttpContext", + "value": "HttpContext" + }, + "ModelState": { + "fields": { + "_maxAllowedErrors": { + "type": "Int32", + "value": "200" + }, + "_root": { + "notCapturedReason": "depth", + "type": "ModelStateNode", + "value": "ModelStateNode" + }, + "Count": { + "type": "Int32", + "value": "1" + }, + "ErrorCount": { + "type": "Int32", + "value": "0" + }, + "HasRecordedMaxModelError": { + "type": "Boolean", + "value": "False" + } + }, + "type": "ModelStateDictionary", + "value": "ModelStateDictionary" + }, + "RouteData": { + "fields": { + "_dataTokens": { + "isNull": "true", + "type": "RouteValueDictionary" + }, + "_routers": { + "isNull": "true", + "type": "List`1" + }, + "_values": { + "notCapturedReason": "depth", + "type": "RouteValueDictionary", + "value": "RouteValueDictionary" + } + }, + "type": "RouteData", + "value": "RouteData" + } + }, + "type": "ControllerContext", + "value": "ControllerContext" + }, + "_logger": { + "type": "ILogger`1", + "value": "ILogger`1" + }, + "_metadataProvider": { + "isNull": "true", + "type": "IModelMetadataProvider" + }, + "_modelBinderFactory": { + "isNull": "true", + "type": "IModelBinderFactory" + }, + "_objectValidator": { + "isNull": "true", + "type": "IObjectModelValidator" + }, + "_problemDetailsFactory": { + "isNull": "true", + "type": "ProblemDetailsFactory" + }, + "_tempData": { + "isNull": "true", + "type": "ITempDataDictionary" + }, + "_url": { + "isNull": "true", + "type": "IUrlHelper" + }, + "_viewBag": { + "isNull": "true", + "type": "DynamicViewData" + }, + "_viewData": { + "isNull": "true", + "type": "ViewDataDictionary" + } + }, + "type": "HomeController", + "value": "HomeController" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "Recursive", + "type": "Samples.Debugger.AspNetCore5.Controllers.HomeController" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "Recursive", + "name": "Samples.Debugger.AspNetCore5.Controllers.HomeController", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + }, + { + "dd.span_id": "ScrubbedValue", + "dd.trace_id": "ScrubbedValue", + "ddsource": "dd_debugger", + "debugger": { + "snapshot": { + "captures": { + "return": { + "arguments": { + "next": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`1", + "value": "Func`1" + } + }, + "locals": { + "@exception": { + "fields": { + "_mutex": { + "isNull": "true", + "type": "Mutex" + }, + "_mutexIndex": { + "type": "Int32", + "value": "-1" + }, + "HelpLink": { + "isNull": "true", + "type": "String" + }, + "HResult": { + "type": "Int32", + "value": "-2146233043" + }, + "InnerException": { + "isNull": "true", + "type": "Exception" + }, + "Message": { + "type": "String", + "value": "The depth of iterations reached 0" + }, + "Source": { + "type": "String", + "value": "Samples.Debugger.AspNetCore5" + }, + "StackTrace": "ScrubbedValue" + }, + "type": "AbandonedMutexException", + "value": "AbandonedMutexException" + } + }, + "staticFields": { + "<>9": { + "type": "<>c", + "value": "<>c" + }, + "<>9__5_0": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_1": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_2": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Func`3", + "value": "Func`3" + }, + "<>9__5_3": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "Action`1", + "value": "Action`1" + }, + "<>9__5_4": { + "fields": { + "_invocationCount": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_invocationList": { + "isNull": "true", + "type": "Object" + }, + "_methodBase": { + "isNull": "true", + "type": "Object" + }, + "_methodPtr": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_methodPtrAux": { + "type": "IntPtr", + "value": "ScrubbedValue" + }, + "_target": { + "type": "Object", + "value": "Object" + } + }, + "type": "RequestDelegate", + "value": "RequestDelegate" + } + }, + "throwable": { + "message": "The depth of iterations reached 0", + "stacktrace": [], + "type": "System.Threading.AbandonedMutexException" + } + } + }, + "duration": "ScrubbedValue", + "id": "ScrubbedValue", + "language": "dotnet", + "probe": { + "id": "ScrubbedValue", + "location": { + "method": "b__5_2", + "type": "Samples.Debugger.AspNetCore5.Startup+<>c" + }, + "version": 1 + }, + "stack": "ScrubbedValue", + "timestamp": "ScrubbedValue" + } + }, + "logger": { + "method": "b__5_2", + "name": "Samples.Debugger.AspNetCore5.Startup+<>c", + "thread_id": "ScrubbedValue", + "thread_name": "ScrubbedValue", + "version": "2" + }, + "message": "ScrubbedValue", + "service": "samples.debugger.aspnetcore5" + } +] \ No newline at end of file diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/AspNetBase.cs b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/AspNetBase.cs new file mode 100644 index 000000000000..2e0314c24c51 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/AspNetBase.cs @@ -0,0 +1,126 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Collections.Specialized; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Datadog.Trace.AppSec.Waf.ReturnTypes.Managed; +using Datadog.Trace.TestHelpers; +using Datadog.Trace.Vendors.Newtonsoft.Json; +using Datadog.Trace.Vendors.Newtonsoft.Json.Linq; +using FluentAssertions; +using VerifyTests; +using VerifyXunit; +using Xunit.Abstractions; + +namespace Datadog.Trace.Debugger.IntegrationTests +{ + [UsesVerify] + public class AspNetBase : TestHelper + { + protected const string Prefix = "Debugger."; + private readonly HttpClient _httpClient; + private int _httpPort; + + public AspNetBase(string sampleName, ITestOutputHelper outputHelper, string samplesDir = null) + : base(Prefix + sampleName, samplesDir ?? "test/test-applications/debugger", outputHelper) + { + var handler = new HttpClientHandler(); + _httpClient = new HttpClient(handler); + +#if NETCOREAPP2_1 + // Keep-alive is causing some weird failures on aspnetcore 2.1 + _httpClient.DefaultRequestHeaders.ConnectionClose = true; +#endif + } + + protected bool IncludeAllHttpSpans { get; set; } = false; + + public override void Dispose() + { + base.Dispose(); + _httpClient?.Dispose(); + } + + protected void SetHttpPort(int httpPort) => _httpPort = httpPort; + + protected async Task<(HttpStatusCode StatusCode, string ResponseText)> SubmitRequest(string path, string body, string contentType, string userAgent = null, string accept = null, IEnumerable> headers = null) + { + try + { + var url = $"http://localhost:{_httpPort}{path}"; + + var response = body == null ? await _httpClient.GetAsync(url) : await _httpClient.PostAsync(url, new StringContent(body, Encoding.UTF8, contentType ?? "application/json")); + var responseText = await response.Content.ReadAsStringAsync(); + return (response.StatusCode, responseText); + } + catch (HttpRequestException ex) + { + return (HttpStatusCode.BadRequest, ex.ToString()); + } + } + + protected async Task> SendRequestsAsync(MockTracerAgent agent, string url, string body, int numberOfAttacks, int expectedSpans, string phase, string contentType = null, string userAgent = null) + { + var minDateTime = DateTime.UtcNow; // when ran sequentially, we get the spans from the previous tests! + await SendRequestsAsyncNoWaitForSpans(url, body, numberOfAttacks, contentType, userAgent); + + return WaitForSpans(agent, expectedSpans, phase, minDateTime, url); + } + + protected IImmutableList WaitForSpans(MockTracerAgent agent, int expectedSpans, string phase, DateTime minDateTime, string url) + { + agent.SpanFilters.Clear(); + + if (!IncludeAllHttpSpans) + { + agent.SpanFilters.Add(s => s.Tags.ContainsKey("http.url") && s.Tags["http.url"].IndexOf(url, StringComparison.InvariantCultureIgnoreCase) > -1); + } + + var spans = agent.WaitForSpans(expectedSpans, minDateTime: minDateTime); + if (spans.Count != expectedSpans) + { + Output?.WriteLine($"spans.Count: {spans.Count} != expectedSpans: {expectedSpans}, this is phase: {phase}"); + } + + return spans; + } + + protected Task> SendRequestsAsync(MockTracerAgent agent, params string[] urls) + { + return SendRequestsAsync(agent, 1, urls); + } + + protected async Task> SendRequestsAsync(MockTracerAgent agent, int expectedSpansPerRequest, params string[] urls) + { + var spans = new List(); + foreach (var url in urls) + { + spans.AddRange(await SendRequestsAsync(agent, url, null, 1, expectedSpansPerRequest, string.Empty)); + } + + return spans.ToImmutableList(); + } + + private async Task SendRequestsAsyncNoWaitForSpans(string url, string body, int numberOfAttacks, string contentType = null, string userAgent = null) + { + for (var x = 0; x < numberOfAttacks; x++) + { + await SubmitRequest(url, body, contentType, userAgent); + } + } + } +} diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..74055ed4a463 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,29 @@ +Iteration 0: + _dd.di._eh : -1268833861 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.0.frame_data.function : SupportedFrame + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.1.frame_data.function : NotSupportedFrame + _dd.debug.error.1.no_capture_reason : The method NotSupportedFrame_Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.NotSupportedFrame(String str) has failed in instrumentation. Failure reason: Dynamic Instrumentation of methods that return a `ref struct` is not yet supported. + _dd.debug.error.2.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.2.frame_data.function : Run + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__6 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.4.frame_data.class_name : d__5 + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.no_capture_reason : The method MoveNext_Samples.Debugger.AspNetCore5.Controllers.HomeController.RunTest(String testName) could not be found. + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -1268833861 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..ab91ba9ff811 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,38 @@ +Iteration 0: + _dd.di._eh : -1268833861 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.0.frame_data.function : SupportedFrame + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.1.frame_data.function : NotSupportedFrame + _dd.debug.error.1.no_capture_reason : The method NotSupportedFrame_Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.NotSupportedFrame(String str) has failed in instrumentation. Failure reason: Dynamic Instrumentation of methods that return a `ref struct` is not yet supported. + _dd.debug.error.10.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.10.frame_data.function : InvokeInnerFilterAsync + _dd.debug.error.10.no_capture_reason : The method InvokeInnerFilterAsync_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() is blacklisted. + _dd.debug.error.2.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.2.frame_data.function : Run + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__6 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.4.frame_data.class_name : d__5 + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.snapshot_id : + _dd.debug.error.8.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.8.frame_data.function : Rethrow + _dd.debug.error.8.no_capture_reason : The method Rethrow_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) is blacklisted. + _dd.debug.error.9.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.9.frame_data.function : Next + _dd.debug.error.9.no_capture_reason : The method Next_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) is blacklisted. + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -1268833861 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..86181c5f317e --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.FullCallStack.RecursiveExceptionTest.verified.txt @@ -0,0 +1,122 @@ +Iteration 0: + _dd.di._eh : -362102791 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : d__1 + _dd.debug.error.0.frame_data.function : MoveNext + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : <b__1_0>d + _dd.debug.error.1.frame_data.function : MoveNext + _dd.debug.error.1.snapshot_id : + _dd.debug.error.10.frame_data.class_name : <b__1_0>d + _dd.debug.error.10.frame_data.function : MoveNext + _dd.debug.error.10.snapshot_id : + _dd.debug.error.11.frame_data.class_name : d__0 + _dd.debug.error.11.frame_data.function : MoveNext + _dd.debug.error.11.snapshot_id : + _dd.debug.error.12.frame_data.class_name : d__1 + _dd.debug.error.12.frame_data.function : MoveNext + _dd.debug.error.12.snapshot_id : + _dd.debug.error.13.frame_data.class_name : <b__1_0>d + _dd.debug.error.13.frame_data.function : MoveNext + _dd.debug.error.13.snapshot_id : + _dd.debug.error.14.frame_data.class_name : d__0 + _dd.debug.error.14.frame_data.function : MoveNext + _dd.debug.error.14.snapshot_id : + _dd.debug.error.15.frame_data.class_name : d__1 + _dd.debug.error.15.frame_data.function : MoveNext + _dd.debug.error.15.snapshot_id : + _dd.debug.error.16.frame_data.class_name : <b__1_0>d + _dd.debug.error.16.frame_data.function : MoveNext + _dd.debug.error.16.snapshot_id : + _dd.debug.error.17.frame_data.class_name : d__0 + _dd.debug.error.17.frame_data.function : MoveNext + _dd.debug.error.17.snapshot_id : + _dd.debug.error.18.frame_data.class_name : d__1 + _dd.debug.error.18.frame_data.function : MoveNext + _dd.debug.error.18.snapshot_id : + _dd.debug.error.19.frame_data.class_name : <b__1_0>d + _dd.debug.error.19.frame_data.function : MoveNext + _dd.debug.error.19.snapshot_id : + _dd.debug.error.2.frame_data.class_name : d__0 + _dd.debug.error.2.frame_data.function : MoveNext + _dd.debug.error.2.snapshot_id : + _dd.debug.error.20.frame_data.class_name : d__0 + _dd.debug.error.20.frame_data.function : MoveNext + _dd.debug.error.20.snapshot_id : + _dd.debug.error.21.frame_data.class_name : d__1 + _dd.debug.error.21.frame_data.function : MoveNext + _dd.debug.error.21.snapshot_id : + _dd.debug.error.22.frame_data.class_name : <b__1_0>d + _dd.debug.error.22.frame_data.function : MoveNext + _dd.debug.error.22.snapshot_id : + _dd.debug.error.23.frame_data.class_name : d__0 + _dd.debug.error.23.frame_data.function : MoveNext + _dd.debug.error.23.snapshot_id : + _dd.debug.error.24.frame_data.class_name : d__1 + _dd.debug.error.24.frame_data.function : MoveNext + _dd.debug.error.24.snapshot_id : + _dd.debug.error.25.frame_data.class_name : <b__1_0>d + _dd.debug.error.25.frame_data.function : MoveNext + _dd.debug.error.25.snapshot_id : + _dd.debug.error.26.frame_data.class_name : d__0 + _dd.debug.error.26.frame_data.function : MoveNext + _dd.debug.error.26.snapshot_id : + _dd.debug.error.27.frame_data.class_name : d__1 + _dd.debug.error.27.frame_data.function : MoveNext + _dd.debug.error.27.snapshot_id : + _dd.debug.error.28.frame_data.class_name : <b__1_0>d + _dd.debug.error.28.frame_data.function : MoveNext + _dd.debug.error.28.snapshot_id : + _dd.debug.error.29.frame_data.class_name : d__0 + _dd.debug.error.29.frame_data.function : MoveNext + _dd.debug.error.29.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__1 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.30.frame_data.class_name : d__1 + _dd.debug.error.30.frame_data.function : MoveNext + _dd.debug.error.30.snapshot_id : + _dd.debug.error.31.frame_data.class_name : d__0 + _dd.debug.error.31.frame_data.function : MoveNext + _dd.debug.error.31.snapshot_id : + _dd.debug.error.32.frame_data.class_name : d__6 + _dd.debug.error.32.frame_data.function : MoveNext + _dd.debug.error.32.snapshot_id : + _dd.debug.error.33.frame_data.class_name : d__5 + _dd.debug.error.33.frame_data.function : MoveNext + _dd.debug.error.33.snapshot_id : + _dd.debug.error.37.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.37.frame_data.function : Rethrow + _dd.debug.error.37.no_capture_reason : The method Rethrow_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) is blacklisted. + _dd.debug.error.38.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.38.frame_data.function : Next + _dd.debug.error.38.no_capture_reason : The method Next_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) is blacklisted. + _dd.debug.error.4.frame_data.class_name : <b__1_0>d + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.snapshot_id : + _dd.debug.error.5.frame_data.class_name : d__0 + _dd.debug.error.5.frame_data.function : MoveNext + _dd.debug.error.5.snapshot_id : + _dd.debug.error.6.frame_data.class_name : d__1 + _dd.debug.error.6.frame_data.function : MoveNext + _dd.debug.error.6.snapshot_id : + _dd.debug.error.7.frame_data.class_name : <b__1_0>d + _dd.debug.error.7.frame_data.function : MoveNext + _dd.debug.error.7.snapshot_id : + _dd.debug.error.8.frame_data.class_name : d__0 + _dd.debug.error.8.frame_data.function : MoveNext + _dd.debug.error.8.snapshot_id : + _dd.debug.error.9.frame_data.class_name : d__1 + _dd.debug.error.9.frame_data.function : MoveNext + _dd.debug.error.9.snapshot_id : + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -362102791 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..c60a341e43e7 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/Approvals/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt @@ -0,0 +1,26 @@ +Iteration 0: + _dd.di._eh : -362102791 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : d__1 + _dd.debug.error.0.frame_data.function : MoveNext + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : <b__1_0>d + _dd.debug.error.1.frame_data.function : MoveNext + _dd.debug.error.1.snapshot_id : + _dd.debug.error.2.frame_data.class_name : d__0 + _dd.debug.error.2.frame_data.function : MoveNext + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__1 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -362102791 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -362102791 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..74055ed4a463 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,29 @@ +Iteration 0: + _dd.di._eh : -1268833861 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.0.frame_data.function : SupportedFrame + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.1.frame_data.function : NotSupportedFrame + _dd.debug.error.1.no_capture_reason : The method NotSupportedFrame_Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.NotSupportedFrame(String str) has failed in instrumentation. Failure reason: Dynamic Instrumentation of methods that return a `ref struct` is not yet supported. + _dd.debug.error.2.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.2.frame_data.function : Run + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__6 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.4.frame_data.class_name : d__5 + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.no_capture_reason : The method MoveNext_Samples.Debugger.AspNetCore5.Controllers.HomeController.RunTest(String testName) could not be found. + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -1268833861 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt new file mode 100644 index 000000000000..ab91ba9ff811 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.FullCallStack.ExceptionWithNonSupportedFramesTest.verified.txt @@ -0,0 +1,38 @@ +Iteration 0: + _dd.di._eh : -1268833861 + _dd.di._er : NotEligible +Iteration 1: + _dd.debug.error.0.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.0.frame_data.function : SupportedFrame + _dd.debug.error.0.snapshot_id : + _dd.debug.error.1.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.1.frame_data.function : NotSupportedFrame + _dd.debug.error.1.no_capture_reason : The method NotSupportedFrame_Samples.Probes.TestRuns.ExceptionReplay.ExceptionWithNonSupportedFramesTest.NotSupportedFrame(String str) has failed in instrumentation. Failure reason: Dynamic Instrumentation of methods that return a `ref struct` is not yet supported. + _dd.debug.error.10.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.10.frame_data.function : InvokeInnerFilterAsync + _dd.debug.error.10.no_capture_reason : The method InvokeInnerFilterAsync_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() is blacklisted. + _dd.debug.error.2.frame_data.class_name : ExceptionWithNonSupportedFramesTest + _dd.debug.error.2.frame_data.function : Run + _dd.debug.error.2.snapshot_id : + _dd.debug.error.3.frame_data.class_name : d__6 + _dd.debug.error.3.frame_data.function : MoveNext + _dd.debug.error.3.snapshot_id : + _dd.debug.error.4.frame_data.class_name : d__5 + _dd.debug.error.4.frame_data.function : MoveNext + _dd.debug.error.4.snapshot_id : + _dd.debug.error.8.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.8.frame_data.function : Rethrow + _dd.debug.error.8.no_capture_reason : The method Rethrow_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) is blacklisted. + _dd.debug.error.9.frame_data.class_name : ControllerActionInvoker + _dd.debug.error.9.frame_data.function : Next + _dd.debug.error.9.no_capture_reason : The method Next_Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) is blacklisted. + _dd.debug.error.exception_hash : + _dd.debug.error.exception_id : + _dd.di._eh : -1268833861 + _dd.di._er : Eligible +Iteration 2: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase +Iteration 3: + _dd.di._eh : -1268833861 + _dd.di._er : CachedDoneExceptionCase diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt new file mode 100644 index 000000000000..cbc399884762 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.RecursiveExceptionTest.verified.txt @@ -0,0 +1,12 @@ +Iteration 0: + _dd.di._er : NotEligible + _dd.di._eh : -362102791 +Iteration 1: + _dd.di._er : Eligible + _dd.di._eh : -362102791 +Iteration 2: + _dd.di._er : CachedDoneExceptionCase + _dd.di._eh : -362102791 +Iteration 3: + _dd.di._er : CachedDoneExceptionCase + _dd.di._eh : -362102791 diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.cs b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.cs new file mode 100644 index 000000000000..1df74c2a53a5 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ExceptionReplay/AspNetCore5ExceptionReplay.cs @@ -0,0 +1,214 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#if NETCOREAPP3_0_OR_GREATER +#pragma warning disable SA1402 // File may only contain a single class +#pragma warning disable SA1649 // File name must match first type name + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Datadog.Trace.Configuration; +using Datadog.Trace.Debugger.IntegrationTests.Helpers; +using Datadog.Trace.Iast.Telemetry; +using Datadog.Trace.TestHelpers; +using Samples.Probes.TestRuns; +using VerifyTests; +using VerifyXunit; +using Xunit; +using Xunit.Abstractions; + +namespace Datadog.Trace.Debugger.IntegrationTests.ExceptionReplay; + +public class AspNetCore5ExceptionReplayEnabledDynamicInstrumentationEnabled : AspNetCore5ExceptionReplay +{ + public AspNetCore5ExceptionReplayEnabledDynamicInstrumentationEnabled(AspNetCoreTestFixture fixture, ITestOutputHelper outputHelper) + : base(fixture, outputHelper, enableDynamicInstrumentation: true, captureFullCallStack: false) + { + } +} + +public class AspNetCore5ExceptionReplayEnabledDynamicInstrumentationEnabled_FullCallStack : AspNetCore5ExceptionReplay +{ + public AspNetCore5ExceptionReplayEnabledDynamicInstrumentationEnabled_FullCallStack(AspNetCoreTestFixture fixture, ITestOutputHelper outputHelper) + : base(fixture, outputHelper, enableDynamicInstrumentation: true, captureFullCallStack: true) + { + } +} + +public class AspNetCore5ExceptionReplayEnabledDynamicInstrumentationDisabled : AspNetCore5ExceptionReplay +{ + public AspNetCore5ExceptionReplayEnabledDynamicInstrumentationDisabled(AspNetCoreTestFixture fixture, ITestOutputHelper outputHelper) + : base(fixture, outputHelper, enableDynamicInstrumentation: false, captureFullCallStack: false) + { + } +} + +public class AspNetCore5ExceptionReplayEnabledDynamicInstrumentationDisabled_FullCallStack : AspNetCore5ExceptionReplay +{ + public AspNetCore5ExceptionReplayEnabledDynamicInstrumentationDisabled_FullCallStack(AspNetCoreTestFixture fixture, ITestOutputHelper outputHelper) + : base(fixture, outputHelper, enableDynamicInstrumentation: false, captureFullCallStack: true) + { + } +} + +public abstract class AspNetCore5ExceptionReplay : AspNetBase, IClassFixture +{ + private static readonly string[] KnownPropertiesToReplace = { "duration", "timestamp", "dd.span_id", "dd.trace_id", "id", "Id", "lineNumber", "thread_name", "thread_id", "<>t__builder", "s_taskIdCounter", "<>u__1", "stack", "m_task" }; + private static readonly string[] KnownPropertiesToRemove = { "CachedReusableFilters", "MaxStateDepth", "MaxValidationDepth", "Empty", "Revision", "_active", "Items", "asyncRun", "run", "tasks" }; + private static readonly string[] KnownClassNamesToRemoveFromExceptionReplayFrame = { "<b__5_2>d" }; + + // This class is used to test Exception Replay with Dynamic Instrumentation enabled or disabled. + public AspNetCore5ExceptionReplay(AspNetCoreTestFixture fixture, ITestOutputHelper outputHelper, bool enableDynamicInstrumentation, bool captureFullCallStack) + : base("AspNetCore5", outputHelper) + { + SetEnvironmentVariable(ConfigurationKeys.Debugger.ExceptionReplayEnabled, "true"); + SetEnvironmentVariable(ConfigurationKeys.Debugger.Enabled, enableDynamicInstrumentation.ToString().ToLower()); + SetEnvironmentVariable(ConfigurationKeys.Debugger.ExceptionReplayCaptureFullCallStackEnabled, captureFullCallStack.ToString().ToLower()); + SetEnvironmentVariable(ConfigurationKeys.Debugger.ExceptionReplayEnabled, "true"); + SetEnvironmentVariable(ConfigurationKeys.Rcm.PollInterval, "100"); + SetEnvironmentVariable(ConfigurationKeys.Debugger.MaxDepthToSerialize, "5"); + SetEnvironmentVariable(ConfigurationKeys.Debugger.DiagnosticsInterval, "1"); + SetEnvironmentVariable(ConfigurationKeys.Debugger.MaxTimeToSerialize, "1000"); + SetEnvironmentVariable("DD_CLR_ENABLE_INLINING", "0"); + + // See https://github.com/dotnet/runtime/issues/91963 + SetEnvironmentVariable("COMPLUS_ForceEnc", "0"); + + DynamicInstrumentationEnabled = enableDynamicInstrumentation; + CaptureFullCallStackEnabled = captureFullCallStack; + Fixture = fixture; + Fixture.SetOutput(outputHelper); + } + + protected bool DynamicInstrumentationEnabled { get; } + + protected bool CaptureFullCallStackEnabled { get; } + + protected AspNetCoreTestFixture Fixture { get; } + + public static IEnumerable ExceptionReplayTests() + { + return DebuggerTestHelper.AllTestDescriptions() + .Where(test => ((ProbeTestDescription)test[0]).TestType.GetCustomAttributes().Any()); + } + + public override void Dispose() + { + base.Dispose(); + Fixture.SetOutput(null); + } + + public async Task TryStartApp() + { + await Fixture.TryStartApp(this); + SetHttpPort(Fixture.HttpPort); + } + + [SkippableTheory] + [MemberData(nameof(ExceptionReplayTests))] + [Trait("RunOnWindows", "True")] + public async Task TestExceptionReplay(ProbeTestDescription testData) + { + var data = testData.TestType.GetCustomAttributes().Single(); + var expectedNumberOfSnapshots = CaptureFullCallStackEnabled ? data.ExpectedNumberOfSnaphotsFull : data.ExpectedNumberOfSnapshotsDefault; + var url = $"/RunTest/{testData.TestType.FullName}"; + + IncludeAllHttpSpans = true; + await TryStartApp(); + var agent = Fixture.Agent; + + var toApprove = new StringBuilder(); + + MockSpan spanOfCapturedException = null; + + for (int i = 0; i < 4; i++) + { + var spans = await SendRequestsAsync(agent, [url]); + var erroredSpan = spans.Single(x => x.Tags.ContainsKey("error.stack")); + + var allTags = erroredSpan.Tags.Where(tag => tag.Key.StartsWith("_dd.di") || tag.Key.StartsWith("_dd.debug")).OrderBy(tag => tag.Key); + + if (allTags.Any(tag => tag.Key == "_dd.di._er" && tag.Value == "NewCase")) + { + Output.WriteLine($"Skipped NewCase tag."); + i -= 1; + continue; + } + + toApprove.AppendLine($"Iteration {i}:"); + + var classNameSuffix = ".frame_data.class_name"; + + var framePrefixesToOmit = allTags + .Where(tag => + { + if (tag.Key.EndsWith(classNameSuffix) && KnownClassNamesToRemoveFromExceptionReplayFrame.Contains(tag.Value)) + { + return true; + } + + if (tag.Key.EndsWith(classNameSuffix) && tag.Value.StartsWith("<")) + { + var framePrefix = tag.Key.Replace(classNameSuffix, string.Empty); + return allTags.Any(tag => (tag.Key == framePrefix + ".no_capture_reason") && tag.Value.EndsWith("blacklisted.")); + } + + return false; + }) + .Select(tag => tag.Key.Replace(classNameSuffix, string.Empty)) + .ToArray(); + + foreach (var tag in allTags) + { + var tagValue = tag.Value; + + if (tag.Key.EndsWith("snapshot_id") || tag.Key.EndsWith("exception_id") || tag.Key.EndsWith("exception_hash")) + { + tagValue = ""; + } + + if (framePrefixesToOmit.Any(tag.Key.StartsWith)) + { + continue; + } + + toApprove.AppendLine($" {tag.Key} : {tagValue}"); + } + + if (allTags.Single(tag => tag.Key == "_dd.di._er").Value == "Eligible") + { + spanOfCapturedException = erroredSpan; + } + + await Task.Delay(250); + } + + var settings = new VerifySettings(); + settings.DisableRequireUniquePrefix(); + settings.UseFileName($"{nameof(AspNetCore5ExceptionReplay)}{(CaptureFullCallStackEnabled ? ".FullCallStack" : string.Empty)}.{testData.TestType.Name}"); + settings.UseDirectory("Approvals"); + await Verifier.Verify(toApprove.ToString(), settings); + + Assert.NotNull(spanOfCapturedException); + + var actualSnapshotsNum = spanOfCapturedException.Tags.Keys.Where(key => key.EndsWith(".snapshot_id")); + + Assert.Equal(expectedNumberOfSnapshots, actualSnapshotsNum.Count()); + + var snapshots = await agent.WaitForSnapshots(expectedNumberOfSnapshots); + + Assert.Equal(expectedNumberOfSnapshots, snapshots!.Length); + + var testName = "ExceptionReplay" + (CaptureFullCallStackEnabled ? ".FullCallStack" : string.Empty) + ".AspNetCore5." + testData.TestType.Name; + await Approver.ApproveSnapshots(snapshots, testName, Output, KnownPropertiesToReplace, KnownPropertiesToRemove, orderPostScrubbing: true); + agent.ClearSnapshots(); + } +} +#endif diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Helpers/Approver.cs b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Helpers/Approver.cs new file mode 100644 index 000000000000..2058dcb10d07 --- /dev/null +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/Helpers/Approver.cs @@ -0,0 +1,238 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Datadog.Trace.TestHelpers; +using Datadog.Trace.Vendors.Newtonsoft.Json.Linq; +using VerifyTests; +using VerifyXunit; +using Xunit.Abstractions; + +namespace Datadog.Trace.Debugger.IntegrationTests.Helpers +{ + internal static class Approver + { + private static readonly string[] _typesToScrub = { nameof(IntPtr), nameof(Guid) }; + private static readonly string[] _knownPropertiesToReplace = { "duration", "timestamp", "dd.span_id", "dd.trace_id", "id", "lineNumber", "thread_name", "thread_id", "<>t__builder", "s_taskIdCounter", "<>u__1", "stack", "m_task" }; + private static readonly string[] _knownPropertiesToRemove = { "CachedReusableFilters", "MaxStateDepth", "MaxValidationDepth" }; + + internal static async Task ApproveSnapshots(string[] snapshots, string testName, ITestOutputHelper output, string[] knownPropertiesToReplace = null, string[] knownPropertiesToRemove = null, bool orderPostScrubbing = false) + { + await ApproveOnDisk(snapshots, testName, "snapshots", output, knownPropertiesToReplace, knownPropertiesToRemove, orderPostScrubbing); + } + + internal static async Task ApproveStatuses(string[] statuses, string testName, ITestOutputHelper output, string[] knownPropertiesToReplace = null, string[] knownPropertiesToRemove = null, bool orderPostScrubbing = false) + { + await ApproveOnDisk(statuses, testName, "statuses", output, knownPropertiesToReplace, knownPropertiesToRemove, orderPostScrubbing); + } + + private static async Task ApproveOnDisk(string[] dataToApprove, string testName, string path, ITestOutputHelper output, string[] knownPropertiesToReplace = null, string[] knownPropertiesToRemove = null, bool orderPostScrubbing = false) + { + knownPropertiesToRemove ??= _knownPropertiesToRemove; + knownPropertiesToReplace ??= _knownPropertiesToReplace; + + if (dataToApprove.Length > 1) + { + // Order the snapshots alphabetically so we'll be able to create deterministic approvals + dataToApprove = dataToApprove.OrderBy(snapshot => snapshot).ToArray(); + } + + var settings = new VerifySettings(); + + settings.UseFileName(testName); + settings.DisableRequireUniquePrefix(); + + settings.AddScrubber(ScrubSnapshotJson); + + settings.ScrubEmptyLines(); + + foreach (var (regexPattern, replacement) in VerifyHelper.SpanScrubbers) + { + settings.AddRegexScrubber(regexPattern, replacement); + } + + AddRuntimeIdScrubber(settings); + + VerifierSettings.DerivePathInfo( + (_, projectDirectory, _, _) => new(directory: Path.Combine(projectDirectory, "Approvals", path))); + + var toVerify = + "[" + + + string.Join( + ",", + dataToApprove.Select(JsonUtility.NormalizeJsonString)) + + + "]"; + + await Verifier.Verify(NormalizeLineEndings(toVerify), settings); + + void ScrubSnapshotJson(StringBuilder input) + { + var json = JArray.Parse(input.ToString()); + + var toRemove = new List(); + + foreach (var descendant in json.DescendantsAndSelf().OfType()) + { + foreach (var item in descendant) + { + try + { + if (knownPropertiesToReplace.Contains(item.Key) && item.Value != null) + { + item.Value.Replace(JToken.FromObject("ScrubbedValue")); + continue; + } + + if (knownPropertiesToRemove.Contains(item.Key) && item.Value != null) + { + toRemove.Add(item.Value.Parent); + continue; + } + + var value = item.Value.ToString(); + switch (item.Key) + { + case "type": + // Sanitizes types whose values may vary from run to run and consequently produce a different approval file. + if (_typesToScrub.Contains(item.Value.ToString())) + { + item.Value.Parent.Parent["value"].Replace("ScrubbedValue"); + } + + break; + case "function": + + // Remove stackframes from "System" namespace, or where the frame was not resolved to a method + if (value.StartsWith("System") || value == string.Empty) + { + toRemove.Add(item.Value.Parent.Parent); + continue; + } + + // Scrub MoveNext methods from `stack` in the snapshot as it varies between Windows/Linux. + if (value.Contains(".MoveNext")) + { + item.Value.Replace(string.Empty); + } + + // Scrub generated DisplayClass from stack in the snapshot as it varies between .net frameworks + if (value.Contains("<>c__DisplayClass")) + { + item.Value.Replace(string.Empty); + } + + break; + case "fileName": + case "file": + // Remove the full path of file names + item.Value.Replace(Path.GetFileName(value)); + + break; + + case "message": + if (!value.Contains("Installed probe ") && !value.Contains("Error installing probe ") && !value.Contains("Emitted probe ") && + !IsParentName(item, parentName: "throwable") && + !IsParentName(item, parentName: "exception")) + { + // remove snapshot message (not probe status) + item.Value.Replace("ScrubbedValue"); + } + + break; + + case "expr": + if (value.StartsWith("Convert(")) + { + var stringToRemove = ", IConvertible"; + var newValue = value.Replace(stringToRemove, string.Empty); + item.Value.Replace(newValue); + } + + break; + + case "stacktrace": + if (IsParentName(item, parentName: "throwable")) + { + // take only the first frame of the exception stacktrace + var firstChild = item.Value.Children().FirstOrDefault(); + if (firstChild != null) + { + item.Value.Replace(new JArray(firstChild)); + } + } + + break; + + case "StackTrace": + if (IsParentName(item, parentName: ".@exception.fields")) + { + item.Value.Replace("ScrubbedValue"); + } + + break; + } + } + catch (Exception) + { + output.WriteLine($"Failed to sanitize snapshot. The part we are trying to sanitize: {item}"); + output.WriteLine($"Complete snapshot: {json}"); + + throw; + } + + static bool IsParentName(KeyValuePair item, string parentName) + { + return item.Value.Path.Substring(0, item.Value.Path.Length - $".{item.Key}".Length).EndsWith(parentName); + } + } + } + + foreach (var itemToRemove in toRemove) + { + var parent = itemToRemove.Parent; + itemToRemove.Remove(); + RemoveEmptyParent(parent); + } + + if (orderPostScrubbing) + { + // Order the snapshots alphabetically so we'll be able to create deterministic approvals + json = new JArray(json.OrderBy(obj => obj.ToString())); + } + + input.Clear().Append(json); + } + + string NormalizeLineEndings(string text) => + text + .Replace(@"\r\n", @"\n") + .Replace(@"\n\r", @"\n") + .Replace(@"\r", @"\n") + .Replace(@"\n", @"\r\n"); + } + + private static void RemoveEmptyParent(JToken token) + { + if (token.Parent is JProperty && token is JObject obj && !obj.Properties().Any()) + { + token.Parent.Remove(); + } + } + + private static void AddRuntimeIdScrubber(VerifySettings settings) + { + var runtimeIdPattern = new Regex(@"(""runtimeId"": "")[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}", RegexOptions.Compiled); + settings.AddRegexScrubber(runtimeIdPattern, "$1scrubbed"); + } + } +} diff --git a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ProbesTests.cs b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ProbesTests.cs index 84857c9be16b..b0716a361a7b 100644 --- a/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ProbesTests.cs +++ b/tracer/test/Datadog.Trace.Debugger.IntegrationTests/ProbesTests.cs @@ -62,9 +62,6 @@ public class ProbesTests : TestHelper typeof(NotSupportedFailureTest) }; - private readonly string[] _typesToScrub = { nameof(IntPtr), nameof(Guid) }; - private readonly string[] _knownPropertiesToReplace = { "duration", "timestamp", "dd.span_id", "dd.trace_id", "id", "lineNumber", "thread_name", "thread_id", "<>t__builder", "s_taskIdCounter", "<>u__1", "stack", "m_task" }; - public ProbesTests(ITestOutputHelper output) : base("Probes", Path.Combine("test", "test-applications", "debugger"), output) { @@ -755,189 +752,20 @@ private async Task RunSingleTestWithApprovals(ProbeTestDescription testDescripti } } - private async Task ApproveSnapshots(string[] snapshots, ProbeTestDescription testDescription, bool isMultiPhase, int phaseNumber) + private Task ApproveSnapshots(string[] snapshots, ProbeTestDescription testDescription, bool isMultiPhase, int phaseNumber) { - await ApproveOnDisk(snapshots, testDescription, isMultiPhase, phaseNumber, "snapshots"); + return Approver.ApproveSnapshots(snapshots, GetTestName(testDescription, isMultiPhase, phaseNumber), Output); } - private async Task ApproveStatuses(string[] statuses, ProbeTestDescription testDescription, bool isMultiPhase, int phaseNumber) + private Task ApproveStatuses(string[] statuses, ProbeTestDescription testDescription, bool isMultiPhase, int phaseNumber) { - await ApproveOnDisk(statuses, testDescription, isMultiPhase, phaseNumber, "statuses"); + return Approver.ApproveStatuses(statuses, GetTestName(testDescription, isMultiPhase, phaseNumber), Output); } - private async Task ApproveOnDisk(string[] dataToApprove, ProbeTestDescription testDescription, bool isMultiPhase, int phaseNumber, string path) + private string GetTestName(ProbeTestDescription testDescription, bool isMultiPhase, int phaseNumber) { - if (dataToApprove.Length > 1) - { - // Order the snapshots alphabetically so we'll be able to create deterministic approvals - dataToApprove = dataToApprove.OrderBy(snapshot => snapshot).ToArray(); - } - - var settings = new VerifySettings(); - var testName = isMultiPhase ? $"{testDescription.TestType.Name}_#{phaseNumber}." : testDescription.TestType.Name; - settings.UseFileName($"{nameof(ProbeTests)}.{testName}"); - settings.DisableRequireUniquePrefix(); - settings.ScrubEmptyLines(); - - foreach (var (regexPattern, replacement) in VerifyHelper.SpanScrubbers) - { - settings.AddRegexScrubber(regexPattern, replacement); - } - - AddRuntimeIdScrubber(settings); - - settings.AddScrubber(ScrubSnapshotJson); - - VerifierSettings.DerivePathInfo( - (_, projectDirectory, _, _) => new(directory: Path.Combine(projectDirectory, "Approvals", path))); - - var toVerify = - "[" - + - string.Join( - ",", - dataToApprove.Select(JsonUtility.NormalizeJsonString)) - + - "]"; - - await Verifier.Verify(NormalizeLineEndings(toVerify), settings); - - void ScrubSnapshotJson(StringBuilder input) - { - var json = JArray.Parse(input.ToString()); - - var toRemove = new List(); - foreach (var descendant in json.DescendantsAndSelf().OfType()) - { - foreach (var item in descendant) - { - try - { - if (_knownPropertiesToReplace.Contains(item.Key) && item.Value != null) - { - item.Value.Replace(JToken.FromObject("ScrubbedValue")); - continue; - } - - var value = item.Value.ToString(); - switch (item.Key) - { - case "type": - // Sanitizes types whose values may vary from run to run and consequently produce a different approval file. - if (_typesToScrub.Contains(item.Value.ToString())) - { - item.Value.Parent.Parent["value"].Replace("ScrubbedValue"); - } - - break; - case "function": - - // Remove stackframes from "System" namespace, or where the frame was not resolved to a method - if (value.StartsWith("System") || value == string.Empty) - { - toRemove.Add(item.Value.Parent.Parent); - continue; - } - - // Scrub MoveNext methods from `stack` in the snapshot as it varies between Windows/Linux. - if (value.Contains(".MoveNext")) - { - item.Value.Replace(string.Empty); - } - - // Scrub generated DisplayClass from stack in the snapshot as it varies between .net frameworks - if (value.Contains("<>c__DisplayClass")) - { - item.Value.Replace(string.Empty); - } - - break; - case "fileName": - case "file": - // Remove the full path of file names - item.Value.Replace(Path.GetFileName(value)); - - break; - - case "message": - if (!value.Contains("Installed probe ") && !value.Contains("Error installing probe ") && !value.Contains("Emitted probe ") && - !IsParentName(item, parentName: "throwable") && - !IsParentName(item, parentName: "exception")) - { - // remove snapshot message (not probe status) - item.Value.Replace("ScrubbedValue"); - } - - break; - - case "expr": - if (value.StartsWith("Convert(")) - { - var stringToRemove = ", IConvertible"; - var newValue = value.Replace(stringToRemove, string.Empty); - item.Value.Replace(newValue); - } - - break; - - case "stacktrace": - if (IsParentName(item, parentName: "throwable")) - { - // take only the first frame of the exception stacktrace - var firstChild = item.Value.Children().FirstOrDefault(); - if (firstChild != null) - { - item.Value.Replace(new JArray(firstChild)); - } - } - - break; - - case "StackTrace": - if (IsParentName(item, parentName: ".@exception.fields")) - { - item.Value.Replace("ScrubbedValue"); - } - - break; - } - } - catch (Exception) - { - Output.WriteLine($"Failed to sanitize snapshot. The part we are trying to sanitize: {item}"); - Output.WriteLine($"Complete snapshot: {json}"); - - throw; - } - - static bool IsParentName(KeyValuePair item, string parentName) - { - return item.Value.Path.Substring(0, item.Value.Path.Length - $".{item.Key}".Length).EndsWith(parentName); - } - } - } - - foreach (var itemToRemove in toRemove) - { - itemToRemove.Remove(); - } - - input.Clear().Append(json); - } - - string NormalizeLineEndings(string text) => - text - .Replace(@"\r\n", @"\n") - .Replace(@"\n\r", @"\n") - .Replace(@"\r", @"\n") - .Replace(@"\n", @"\r\n"); - } - - private void AddRuntimeIdScrubber(VerifySettings settings) - { - var runtimeIdPattern = new Regex(@"(""runtimeId"": "")[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}", RegexOptions.Compiled); - settings.AddRegexScrubber(runtimeIdPattern, "$1scrubbed"); + return $"{nameof(ProbeTests)}.{testName}"; } private (ProbeAttributeBase ProbeTestData, ProbeDefinition Probe)[] GetProbeConfiguration(Type testType, bool unlisted, DeterministicGuidGenerator guidGenerator) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json b/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json index 48eea4e5f48b..d6b758ae9e89 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json @@ -393,6 +393,11 @@ "DD_EXCEPTION_DEBUGGING_CAPTURE_FULL_CALLSTACK_ENABLED": "dd_exception_debugging_capture_full_callstack_enabled", "DD_EXCEPTION_DEBUGGING_RATE_LIMIT_SECONDS": "dd_exception_debugging_rate_limit_seconds", "DD_EXCEPTION_DEBUGGING_MAX_EXCEPTION_ANALYSIS_LIMIT": "dd_exception_debugging_max_exception_analysis_limit", + "DD_EXCEPTION_REPLAY_ENABLED": "dd_exception_replay_enabled", + "DD_EXCEPTION_REPLAY_MAX_FRAMES_TO_CAPTURE": "dd_exception_replay_max_frames_to_capture", + "DD_EXCEPTION_REPLAY_CAPTURE_FULL_CALLSTACK_ENABLED": "dd_exception_replay_capture_full_callstack_enabled", + "DD_EXCEPTION_REPLAY_RATE_LIMIT_SECONDS": "dd_exception_replay_rate_limit_seconds", + "DD_EXCEPTION_REPLAY_MAX_EXCEPTION_ANALYSIS_LIMIT": "dd_exception_replay_max_exception_analysis_limit", "DD_TRACE_OBFUSCATION_QUERY_STRING_PATTERN": "dd_trace_obfuscation_query_string_pattern", "DD_CALL_BASIC_CONFIG": "dd_call_basic_config", "DD_SERVICE_MAPPING": "dd_service_mapping", diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HealthController.cs b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HealthController.cs new file mode 100644 index 000000000000..a87b73d10edd --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HealthController.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Mvc; + +namespace Samples.Debugger.AspNetCore5.Controllers +{ + [Route("[controller]")] + [ApiController] + public class HealthController : ControllerBase + { + public IActionResult Index() + { + return Content("Ok\n"); + } + + [HttpGet("params/{id}")] + public IActionResult Params(string id) + { + return Content($"Hello {id}\n"); + } + } +} diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HomeController.cs b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HomeController.cs new file mode 100644 index 000000000000..73df5247a755 --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Controllers/HomeController.cs @@ -0,0 +1,96 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using System; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Threading; +using Samples.Probes.TestRuns; + +namespace Samples.Debugger.AspNetCore5.Controllers +{ + public class HomeController : Controller + { + private readonly ILogger _logger; + + public HomeController(ILogger logger) + { + _logger = logger; + } + + public IActionResult Index() + { + ViewBag.ProfilerAttached = SampleHelpers.IsProfilerAttached(); + ViewBag.TracerAssemblyLocation = SampleHelpers.GetTracerAssemblyLocation(); + + return Content("ok"); + } + + public IActionResult LangHeader() + { + Response.Headers.Add("content-language", "krypton"); + return Content("Setting content-language"); + } + + [AcceptVerbs("GET")] + [Route("/null-action/{pathparam}/{pathparam2}")] + public object NullAction(string pathparam, string pathparam2) + { + return null; + } + + [HttpGet("/RunTest/{testName}")] + public async Task RunTest([FromRoute] string testName) + { + var instance = GetInstance(testName); + await RunTest(instance, testName); + } + private static async Task RunTest(object instance, string testClassName) + { + switch (instance) + { + case IRun run: + run.Run(); + break; + case IAsyncRun asyncRun: + await asyncRun.RunAsync(); + break; + default: + throw new Exception($"Test class not found: {testClassName}"); + } + } + + private static object GetInstance(string testName) + { + var type = Assembly.GetAssembly(typeof(IRun)).GetType(testName); + if (type == null) + { + throw new ArgumentException($"Type {testName} not found in assembly {Assembly.GetExecutingAssembly().GetName().Name}"); + } + + var instance = Activator.CreateInstance(type); + return instance; + } + + [HttpGet("/Recursive/{iterations}")] + public async Task Recursive([FromRoute] int iterations) + { + if (iterations <= 0) + { + throw new AbandonedMutexException($"The depth of iterations reached {iterations}"); + } + + await Task.Yield(); + return await PingPonged.Me(async (int iteration) => await Recursive(iteration), iterations - 1); + } + + ref struct PingPonged + { + public static async Task Me(Func> method, int iteration) + { + return await method(iteration); + } + } + } +} diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Program.cs b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Program.cs new file mode 100644 index 000000000000..4850aa007eaa --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Program.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Samples.Debugger.AspNetCore5 +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Properties/launchSettings.json b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Properties/launchSettings.json new file mode 100644 index 000000000000..913e904792e9 --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Properties/launchSettings.json @@ -0,0 +1,74 @@ +{ + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DD_DOTNET_TRACER_HOME": "$(SolutionDir)shared\\bin\\monitoring-home", + "CORECLR_ENABLE_PROFILING": "1", + "CORECLR_PROFILER": "{846F5F1C-F9AE-4B07-969E-05C26BC060D8}", + "CORECLR_PROFILER_PATH_32": "$(SolutionDir)shared\\bin\\monitoring-home\\win-x86\\Datadog.Tracer.Native.dll", + "CORECLR_PROFILER_PATH_64": "$(SolutionDir)shared\\bin\\monitoring-home\\win-x64\\Datadog.Tracer.Native.dll", + "DD_VERSION": "1.0.0", + "DD_TRACE_HEADER_TAGS": "sample.correlation.identifier, Server", + "DD_TRACE_DEBUG": "1" + }, + "nativeDebugging": true, + "use64Bit": true + }, + "Samples.Security.AspNetCore5": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DD_LOG_LEVEL": "DEBUG", + "CORECLR_PROFILER_PATH": "$(SolutionDir)shared\\bin\\monitoring-home\\win-x64\\Datadog.Tracer.Native.dll", + "CORECLR_PROFILER_PATH_64": "$(SolutionDir)shared\\bin\\monitoring-home\\win-x64\\Datadog.Tracer.Native.dll", + "COR_PROFILER_PATH": "$(SolutionDir)shared\\bin\\monitoring-home\\win-x64\\Datadog.Tracer.Native.dll", + "COR_PROFILER_PATH_64": "$(SolutionDir)shared\\bin\\monitoring-home\\win-x64\\Datadog.Tracer.Native.dll", + "COR_ENABLE_PROFILING": "1", + "COR_PROFILER": "{846F5F1C-F9AE-4B07-969E-05C26BC060D8}", + "CORECLR_ENABLE_PROFILING": "1", + "DD_DYNAMIC_INSTRUMENTATION_ENABLED": "1", + "DD_DOTNET_TRACER_HOME": "$(SolutionDir)shared\\bin\\monitoring-home", + "CORECLR_PROFILER": "{846F5F1C-F9AE-4B07-969E-05C26BC060D8}", + "DD_DUMP_ILREWRITE_ENABLED": "1", + "DD_WRITE_INSTRUMENTATION_TO_DISK": "1", + "DD_INTERNAL_RCM_POLL_INTERVAL": "2000", + "DD_DEBUGGER_DIAGNOSTICS_INTERVAL": "5", + "DD_SERVICE": "exception_replay_service", + "DD_ENV": "staging", + "DD_TRACE_DEBUG": "3", + "DD_TRACE_ENABLED": "true", + "DD_VERSION": "1", + "DD_IAST_ENABLED": "false", + "DD_DEBUGGER_MAX_DEPTH_TO_SERIALIZE": "2", + "DD_EXCEPTION_REPLAY_ENABLED": "true", + "DD_EXCEPTION_DEBUGGING_CAPTURE_FULL_CALLSTACK_ENABLED": "false", + "DD_DYNAMIC_INSTRUMENTATION_INTERAL_FORCE_SYMBOL_DATABASE_UPLOAD": "true", + "DD_DYNAMIC_INSTRUMENTATION_SYMBOL_DATABASE_UPLOAD_ENABLED": "true", + "DD_SYMBOL_DATABASE_UPLOAD_ENABLED": "true", + "DD_EXCEPTION_DEBUGGING_RATE_LIMIT_SECONDS": "5" + }, + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Warning" + } + }, + "nativeDebugging": true, + "use64Bit": false, + "applicationUrl": "http://localhost:5458" + } + }, + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:5458/", + "sslPort": 44320 + } + } +} \ No newline at end of file diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Samples.Debugger.AspNetCore5.csproj b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Samples.Debugger.AspNetCore5.csproj new file mode 100644 index 000000000000..74a035c9738d --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Samples.Debugger.AspNetCore5.csproj @@ -0,0 +1,130 @@ + + + + netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0 + + + + None + false + + + + portable + False + + + + portable + False + + + + portable + False + + + + portable + False + + + + portable + False + + + + portable + False + + + + False + portable + + + + False + portable + + + + False + portable + + + + False + portable + + + + False + portable + + + + False + portable + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Startup.cs b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Startup.cs new file mode 100644 index 000000000000..f53f20c54145 --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/Startup.cs @@ -0,0 +1,76 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Samples.Debugger.AspNetCore5 +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + private IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + // todo, for now disable to test that the block exception isn't caught by the call target integrations. + // app.UseExceptionHandler("/Home/Error"); + } + + app.UseRouting(); + app.Map( + "/alive-check", + builder => + { + builder.Run( + async context => + { + await context.Response.WriteAsync("Yes"); + }); + }); + + app.Map( + "/shutdown", + builder => + { + builder.Run( + async context => + { + await context.Response.WriteAsync("Shutting down"); + _ = Task.Run(() => builder.ApplicationServices.GetService().StopApplication()); + }); + }); + + app.Use( + async (context, next) => + { + await next.Invoke(); + }); + + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.Development.json b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.Development.json new file mode 100644 index 000000000000..8983e0fc1c5e --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.json b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.json new file mode 100644 index 000000000000..4faf77acf9e5 --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/appsettings.json @@ -0,0 +1,3 @@ +{ + "AllowedHosts": "*" +} diff --git a/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/web.config b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/web.config new file mode 100644 index 000000000000..17fa99bdf17f --- /dev/null +++ b/tracer/test/test-applications/debugger/Samples.Debugger.AspNetCore5/web.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/ExceptionWithNonSupportedFramesTest.cs b/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/ExceptionWithNonSupportedFramesTest.cs new file mode 100644 index 000000000000..e17f4bad657e --- /dev/null +++ b/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/ExceptionWithNonSupportedFramesTest.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Samples.Probes.TestRuns.ExceptionReplay +{ + [ExceptionReplayTestData(expectedNumberOfSnapshotsDefault: 4, expectedNumberOfSnaphotsFull: 5)] + internal class ExceptionWithNonSupportedFramesTest : IRun + { + public void Run() + { + NotSupportedFrame(nameof(ExceptionWithNonSupportedFramesTest)); + } + + ref MeRefStruct NotSupportedFrame(string str) + { + SupportedFrame(str); + throw new Exception(); + } + + void SupportedFrame(string str) + { + throw new InvalidOperationException(str); + } + + ref struct MeRefStruct + { + public string Field; + } + } +} diff --git a/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/RecursiveExceptionTest.cs b/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/RecursiveExceptionTest.cs new file mode 100644 index 000000000000..c5c68093813c --- /dev/null +++ b/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplay/RecursiveExceptionTest.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Samples.Probes.TestRuns.ExceptionReplay +{ + [ExceptionReplayTestData(expectedNumberOfSnapshotsDefault: 5, expectedNumberOfSnaphotsFull: 35)] + internal class RecursiveExceptionTest : IAsyncRun + { + public async Task RunAsync() + { + await Recursive(10); + } + + public async Task Recursive(int iterations) + { + if (iterations <= 0) + { + throw new AbandonedMutexException($"The depth of iterations reached {iterations}"); + } + + await Task.Yield(); + return await PingPonged.Me(async (int iteration) => await Recursive(iteration), iterations - 1); + } + + ref struct PingPonged + { + public static async Task Me(Func> method, int iteration) + { + return await method(iteration); + } + } + } +} diff --git a/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplayTestDataAttribute.cs b/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplayTestDataAttribute.cs new file mode 100644 index 000000000000..68c9e29de5b2 --- /dev/null +++ b/tracer/test/test-applications/debugger/dependency-libs/Samples.Probes.TestRuns/ExceptionReplayTestDataAttribute.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Samples.Probes.TestRuns +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + public class ExceptionReplayTestDataAttribute : Attribute + { + public ExceptionReplayTestDataAttribute(int expectedNumberOfSnapshotsDefault, int expectedNumberOfSnaphotsFull) + { + ExpectedNumberOfSnapshotsDefault = expectedNumberOfSnapshotsDefault; + ExpectedNumberOfSnaphotsFull = expectedNumberOfSnaphotsFull; + } + + public int ExpectedNumberOfSnapshotsDefault { get; } + public int ExpectedNumberOfSnaphotsFull { get; } + } + +}