Run SOS test harness on Helix - #5981
Open
steveisok wants to merge 34 commits into
Open
Conversation
Add a marker-driven scenario process that exposes managed stacks, heap shapes, exceptions, delegates, synchronization state, and crash points for SOS command validation across runtime versions and deployment modes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bba76c7-c3b4-4774-84d5-6d21347e8ef8
Add reusable target acquisition, dump capture, debugger-host abstractions, matrix configuration, SOS output parsing, replay diagnostics, and source generation for marker constants used by command tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bba76c7-c3b4-4774-84d5-6d21347e8ef8
Run dbgeng command execution and dump capture in helper processes so debugger failures remain isolated from the xUnit test host and architecture-specific binaries are resolved correctly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bba76c7-c3b4-4774-84d5-6d21347e8ef8
Add xUnit v3 command coverage for stacks, threads, heaps, objects, modules, runtime state, and diagnostic commands across supported hosts, deployment flavors, dump kinds, GC modes, runtimes, and DAC implementations. Include failure replay output and a local execution runbook. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bba76c7-c3b4-4774-84d5-6d21347e8ef8
Include the harness library, source generator, debugger helper hosts, and SOS.Tests project in build.sln for IDE discovery and repository builds. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bba76c7-c3b4-4774-84d5-6d21347e8ef8
Disable W^X for live debuggees so bpmd can patch JIT code without triggering access violations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2d5c60f7-9c89-42e6-b9fc-04ef78c8f8d8
Pipeline artifact transfer drops executable bits. Restore them before running the MTP test apphost or launching debuggee apphosts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2d5c60f7-9c89-42e6-b9fc-04ef78c8f8d8
Use Arcade's TestToRun command path directly because UseAppHost metadata is not populated for the MTP executable. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2d5c60f7-9c89-42e6-b9fc-04ef78c8f8d8
Publish version-matched single-file debuggees during the build and make the test harness consume the transferred immutable outputs instead of invoking dotnet publish during tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 886d87aa-631a-49cd-a973-aacd17a1df81
Add deterministic capture-family sharding, a shared SOS Helix payload, cross-platform launchers, and public pipeline integration while retaining non-SOS local tests.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a new SOS test harness–driven test suite (SOS.Tests) and wires it into CI so the suite can run as sharded Helix work items (while being skipped in the existing test-only pipeline legs). It also adds supporting debuggee publishing and a set of harness utilities/parsers to make SOS output assertions deterministic and debuggable across hosts (cdb/lldb/dotnet-dump), runtimes, and dump kinds.
Changes:
- Add
SOS.Tests(xUnit v3 / Microsoft.Testing.Platform) plus a large set of harness-backed SOS command tests and parsing helpers. - Extend the SOS harness infrastructure (targets, replay capture, tokens/table parsing, host abstractions) and add a shared debuggee stop-point mechanism for snapshot/live modes.
- Update build/CI to prepublish required debuggees, add Helix SDK usage, and submit sharded SOS.Tests runs to Helix with OS/RID-specific launchers.
Show a summary per file
| File | Description |
|---|---|
| src/tests/SOS.UnitTests/Debuggees/SosHarnessScenarios/TestHarness.cs | Debuggee-side stop-point helper for snapshot/live modes |
| src/tests/SOS.UnitTests/Debuggees/SosHarnessScenarios/SosHarnessScenarios.csproj | New scenarios debuggee project definition |
| src/tests/SOS.UnitTests/Debuggees/Directory.Build.props | Write runtime.version after single-file publish |
| src/tests/SOS.Tests/WindowsTheoryAttribute.cs | Windows-only theory attribute/discoverer |
| src/tests/SOS.Tests/TestObjectHelpers.cs | Heap object lookup helpers |
| src/tests/SOS.Tests/TestConfigShardTests.cs | Shard selection + stable hashing tests |
| src/tests/SOS.Tests/StackInspectionTests.cs | Stack inspection command coverage |
| src/tests/SOS.Tests/SpecializedInspectionTests.cs | Specialized state-dependent command coverage |
| src/tests/SOS.Tests/SosTheoryAttribute.cs | Cross-platform theory attribute semantics |
| src/tests/SOS.Tests/SOS.Tests.csproj | SOS.Tests MTP/xUnit v3 test app project |
| src/tests/SOS.Tests/RuntimeInfoTests.cs | Runtime/module/process listing command coverage |
| src/tests/SOS.Tests/README.md | SOS.Tests usage + matrix documentation |
| src/tests/SOS.Tests/PrintExceptionTests.cs | printexception coverage across matrix |
| src/tests/SOS.Tests/ObjectGcHelperTests.cs | Per-object GC helper command coverage |
| src/tests/SOS.Tests/ObjectFieldsTests.cs | dumpobj/dumpvc field-level assertion coverage |
| src/tests/SOS.Tests/NativeAddressSpaceTests.cs | notreachableinrange coverage |
| src/tests/SOS.Tests/ModuleResolveTests.cs | name2ee/token2ee resolution round-trip coverage |
| src/tests/SOS.Tests/MiscCommandTests.cs | Session/diagnostic command smoke coverage |
| src/tests/SOS.Tests/MemoryAndDecodeTests.cs | dp/dq/db + threadstate/taskstate/dumpexceptions coverage |
| src/tests/SOS.Tests/LiveBpmdTests.cs | Live bpmd breakpoint mechanism coverage |
| src/tests/SOS.Tests/HeapAnalysisTests.cs | sizestats/traverseheap/ephrefs coverage |
| src/tests/SOS.Tests/GcWhereTests.cs | gcwhere structure + live promotion coverage |
| src/tests/SOS.Tests/EeHeapTests.cs | eeheap -gc parsing/structure coverage |
| src/tests/SOS.Tests/DumpSigTests.cs | dumpsig/dumpsigelem coverage |
| src/tests/SOS.Tests/DumpModuleTests.cs | dumpmodule structure + -mt type table coverage |
| src/tests/SOS.Tests/DumpIlTests.cs | dumpil structure + -i coverage |
| src/tests/SOS.Tests/DumpHeapThinLockTests.cs | dumpheap -thinlock coverage |
| src/tests/SOS.Tests/DumpHeapStringsTests.cs | dumpheap -strings coverage |
| src/tests/SOS.Tests/DumpHeapObjectsTests.cs | dumpheap objects/stats/filters self-consistency coverage |
| src/tests/SOS.Tests/DumpHeapLiveDeadTests.cs | dumpheap -live/-dead coverage |
| src/tests/SOS.Tests/DumpHeapGenerationsTests.cs | dumpheap generation/region filtering vs eeheap oracle |
| src/tests/SOS.Tests/DumpDomainTests.cs | dumpdomain/dumpassembly coverage + round-trips |
| src/tests/SOS.Tests/DumpDelegateTests.cs | dumpdelegate coverage |
| src/tests/SOS.Tests/DumpArrayTests.cs | dumparray parameter + edge case coverage |
| src/tests/SOS.Tests/DiagnosticCommandTests.cs | dumpgcdata/sosstatus/logging/clrma coverage |
| src/tests/SOS.Tests/CollectionQueueTests.cs | dcq/threadpoolqueue coverage |
| src/tests/SOS.Tests/CodeInfoTests.cs | ehinfo/gcinfo coverage |
| src/tests/SOS.Tests/ClrUTests.cs | cdb-only clru coverage + interleaving switches |
| src/tests/SOS.Tests/ClrThreadsTests.cs | clrthreads coverage + structured assertions |
| src/tests/SOS.Tests/ClrThreadsParsing.cs | Custom clrthreads table parser |
| src/tests/SOS.Tests/ClrStackLinesTests.cs | clrstack source line coverage + -n self-consistency |
| src/tests/SOS.Tests/ClrStackICorDebugTests.cs | clrstack -i/-i -a coverage (ICorDebug) |
| src/tests/SOS.Tests/ClrStackFullTests.cs | clrstack -f coverage + host-conditional assertions |
| src/tests/SOS.Tests/ClrStackFrameCountTests.cs | clrstack -c frame limit coverage |
| src/tests/SOS.Tests/ClrStackAllThreadsTests.cs | clrstack -all coverage + deterministic worker parking |
| src/tests/SOS.TestHarness/Targets.cs | Target acquisition + dump session memoization |
| src/tests/SOS.TestHarness/Target.cs | Unified live/dead target surface + replay hooks |
| src/tests/SOS.TestHarness/SosToken.cs | Token vocabulary for nondeterministic values |
| src/tests/SOS.TestHarness/SosRow.cs | Table row model + extra columns / structured data |
| src/tests/SOS.TestHarness/SosDataRowExtensions.cs | Assertion helpers for structured data rows |
| src/tests/SOS.TestHarness/SosDataRow.cs | Structured sub-record representation |
| src/tests/SOS.TestHarness/SosDataExtractor.cs | Delegate type for internal-data extraction |
| src/tests/SOS.TestHarness/SosConvert.cs | Shared token-based numeric/boolean converters |
| src/tests/SOS.TestHarness/SosColumn.cs | Column spec + alignment helpers |
| src/tests/SOS.TestHarness/SosCell.cs | Cell parsing helpers + rich failures |
| src/tests/SOS.TestHarness/SosAssertException.cs | Rich assertion exception for SOS output |
| src/tests/SOS.TestHarness/SOS.TestHarness.csproj | Harness library project wiring |
| src/tests/SOS.TestHarness/ReplayContext.cs | Per-test replay capture of navigations/commands |
| src/tests/SOS.TestHarness/lldbhelper.py | LLDB command framing helper with sentinels |
| src/tests/SOS.TestHarness/LldbCliHost.cs | LLDB dump host implementation wiring |
| src/tests/SOS.TestHarness/Liveness.cs | Liveness axis enum |
| src/tests/SOS.TestHarness/ILiveDebuggerHost.cs | Live host interface abstraction |
| src/tests/SOS.TestHarness/IDiagnosticHost.cs | Optional host diagnostics capture interface |
| src/tests/SOS.TestHarness/IDebuggerHost.cs | Debugger host interface abstraction |
| src/tests/SOS.TestHarness/HostSlot.cs | Single-slot host pooling/exclusive leasing |
| src/tests/SOS.TestHarness/Hosts.cs | Host axis enum |
| src/tests/SOS.TestHarness/HostFactory.cs | Host construction factory |
| src/tests/SOS.TestHarness/HarnessSkip.cs | Dynamic skip exception for intrinsic limitations |
| src/tests/SOS.TestHarness/HarnessCancellation.cs | Bridge runner cancellation into host waits |
| src/tests/SOS.TestHarness/GcType.cs | GC type axis enum |
| src/tests/SOS.TestHarness/Flavor.cs | Flavor axis enum |
| src/tests/SOS.TestHarness/EngineProtocol.cs | EngineHost line protocol markers |
| src/tests/SOS.TestHarness/DumpKind.cs | Dump kind axis enum |
| src/tests/SOS.TestHarness/DumpGenerationRequirements.cs | Windows reduced-dump prerequisite logic |
| src/tests/SOS.TestHarness/DeadTarget.cs | Dump-backed target cursor implementation |
| src/tests/SOS.TestHarness/DbgEngDumpHost.cs | dbgeng dump host wrapper |
| src/tests/SOS.TestHarness/DbgEngCapturer.cs | dbgeng-based dump capture for non-self-collect cases |
| src/tests/SOS.TestHarness/DacPolicy.cs | --usecdac selection + env clamp |
| src/tests/SOS.TestHarness/Dac.cs | DAC axis enum |
| src/tests/SOS.TestHarness/CoreVersion.cs | Core version axis enum + semantics |
| src/tests/SOS.TestHarness/CaptureCli.cs | Out-of-proc capturer entrypoint logic |
| src/tests/SOS.TestHarness.SourceGen/SOS.TestHarness.SourceGen.csproj | Source generator project definition |
| src/tests/SOS.TestHarness.EngineHost/SOS.TestHarness.EngineHost.csproj | EngineHost dbgeng child process project |
| src/tests/SOS.TestHarness.EngineHost/Program.cs | EngineHost REPL implementation |
| src/tests/SOS.TestHarness.Capturer/SOS.TestHarness.Capturer.csproj | Capturer child process project |
| src/tests/SOS.TestHarness.Capturer/Program.cs | Capturer program entrypoint |
| src/tests/Debuggees.proj | Prepublish SOS single-file debuggees + build Framework debuggees |
| global.json | Add Helix MSBuild SDK |
| eng/pipelines/build.yml | Add SOS Helix submission path + skip local run arg |
| eng/helix/sos/run-sos-tests.sh | Unix Helix work item runner for SOS.Tests |
| eng/helix/sos/run-sos-tests.cmd | Windows Helix work item runner for SOS.Tests |
| diagnostics.yml | Enable SOS.Tests Helix runs per OS queue |
Review details
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Suppressed comments (2)
eng/pipelines/build.yml:159
- Azure Pipelines parameters
testOnly/buildOnlyare declared as booleans, but this block compares them to the string'true'. That will cause the conditions to evaluate incorrectly (e.g., the mutual-exclusion error and script-selection logic won’t trigger when expected). Use boolean literals consistently.
- ${{ if and(eq(parameters.testOnly, 'true'), eq(parameters.buildOnly, 'true')) }}:
'error, testOnly and buildOnly cannot be true at the same time': error
# Test-only legs invoke test.cmd/test.sh, which already encode
# '-test -skipmanaged -skipnative' and do not prepend '-restore -build'. All other legs
eng/pipelines/build.yml:220
- The
displayNameselection still compares boolean parameters to the string'true', which can result in the wrong name being applied (and is inconsistent with the boolean comparisons used elsewhere in this file).
$(_SkipSOSHelixTestsArg)
/p:OfficialBuildId=$(BUILD.BUILDNUMBER)
${{ if eq(parameters.testOnly, 'true') }}:
displayName: Test
${{ elseif eq(parameters.buildOnly, 'true') }}:
- Files reviewed: 126/126 changed files
- Comments generated: 2
- Review effort level: Lite
Comment on lines
+19
to
+24
| string prefix = typeName.Split('<')[0]; | ||
| SosRow row = target.DumpHeap($"-type {prefix}").Statistics | ||
| .SingleRow(r => r["Class Name"].Value == typeName, $"a single {typeName} method table"); | ||
| ulong mt = row["MT"].AsUInt64(Sos.Addr); | ||
| return target.DumpHeap($"-mt {mt:x} -short").ShortAddresses[0]; | ||
| } |
Comment on lines
+52
to
+73
| ProcessStartInfo psi = new(dotnet) | ||
| { | ||
| UseShellExecute = false, | ||
| RedirectStandardOutput = true, | ||
| RedirectStandardError = true, | ||
| }; | ||
| psi.ArgumentList.Add(dumpDll); | ||
| psi.ArgumentList.Add("collect"); | ||
| psi.ArgumentList.Add("-p"); | ||
| psi.ArgumentList.Add(Environment.ProcessId.ToString()); | ||
| psi.ArgumentList.Add("--type"); | ||
| psi.ArgumentList.Add(Environment.GetEnvironmentVariable("SOSHARNESS_DUMP_TYPE") ?? "Heap"); | ||
| psi.ArgumentList.Add("-o"); | ||
| psi.ArgumentList.Add(outPath); | ||
|
|
||
| using Process p = Process.Start(psi)!; | ||
| p.WaitForExit(); | ||
| if (p.ExitCode != 0 || !File.Exists(outPath)) | ||
| { | ||
| throw new InvalidOperationException( | ||
| $"Snapshot '{name}' failed (exit {p.ExitCode}): {p.StandardError.ReadToEnd()}"); | ||
| } |
Pass the local SOS exclusion through the environment so Arcade test orchestration sees it, prepare the shared payload only in the outer Helix build, and define the Helix binlog configuration variable.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Reduce the correlation payload to the runtime and debuggee closure, support one-work-item smoke submissions, and make the macOS launcher portable and capable of capturing signed debuggees without impractical single-file snapshots. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Repair LLDB Python discovery on Ubuntu and redirect Alpine execution state out of the read-only correlation payload. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Spread macOS Debug dump capture families across twelve Helix work items and cap each xUnit runner at four parallel threads to reduce LLDB memory pressure. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Stage the RID-specific DbgEng payload explicitly and surface EngineHost startup failures without repeated two-minute timeouts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore the Windows CDB payload from the standalone Helix project and prevent Linux single-file dump helpers from retaining redirected pipes indefinitely. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Use 32 four-thread dump work items for both macOS configurations while retaining the two live work items and existing non-macOS graph. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Configure DbgHelp DAC registration within Windows Helix work items, restore registry state afterward, and fix Linux cleanup-test and dbgout state races. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Allow createdump descendants to finish draining inherited output and generate framework-dependent win-x86 debuggee apphosts with the target architecture. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Resolve global.json by taking the updated .NET 10.0.111 and Arcade 26423.1 versions while retaining the explicit Helix SDK at the matching Arcade build. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Run macOS SOS tests and debuggees on .NET 11, provision LLDB support on Alpine, and let each test leg start after its matching build within a single CI stage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Build desktop debuggees for x86 and make SOS parsers and assertions handle valid 32-bit register, disassembly, GC, heap, memory, and object layouts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Propagate the target RID into nested debuggee builds so Alpine receives musl apphosts and publishes. Reuse a bounded LLDB dump-host slot to prevent core-loaded processes from accumulating and being killed under memory pressure. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Run SOS.Tests on macOS and Ubuntu ARM64 Helix queues while keeping x64 macOS coverage on rolling builds. Add Helix-only artifact submission for cross-built targets and skip the known macOS x64 legacy-DAC SyncBlock failures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Run x64 build and tests before cross-building arm64 in the same macOS jobs, with PR Helix coverage focused on arm64 and rolling coverage for both architectures. Support older LLDB discovery on Ubuntu arm64 and isolate the Apple LLDB Mach exception workaround to the hosted SOS runtime. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Allow Windows dump helpers that outlive a self-collect target to close inherited output within the bounded capture deadline. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Move the remaining exception-specific assertions into SOS.Tests across live and dump matrices, preserve CLRMA and source-line coverage, and document the migration status of every legacy SOS test. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Validate the queried file version structure before copying it so eeversion reliably prints the SOS version on x86. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Resolve global.json by taking Arcade 26427.5 from main and retaining the explicit Helix SDK at the matching Arcade build. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Remove the unsupported single-file cDAC matrix and stack-walk exclusions, document the supported .NET 11 combination, and add regression coverage for the version boundary. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Build a macOS LLDB.framework-based driver for the SOS harness, stage it in the shared Helix payload, and preserve command diagnostics through nested LLDB dispatch. Reject invalid CLRMA thread identifiers instead of asserting in debug hosts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Continue past first-chance exception breaks when capturing dumps or navigating live Windows targets so SOS observes the final unhandled exception. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74091c6d-a9ae-444d-a73f-51326a56461e
Fix Linux process-exit and LLDB teardown races, use a valid object-reference range for notreachableinrange, and guard known macOS dump-analysis gaps. Add a host-runtime override for validating SOS against patched CoreCLR builds. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
Locate the dedicated ObjectReference array directly so the notreachableinrange test does not wedge dotnet-dump on Linux while obtaining a real object-reference slot. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2cabce32-3eb0-486e-a7ed-5ac58541fde9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on #5979
This PR is based on the head commit from #5979. Until that PR merges, GitHub will show both the parent changes and this dependent Helix layer in the diff.
Summary
dotnet SOS.Tests.dllexecution on Alpine and upload of test results, replay files, logs, and diagnosticsValidation
Actual Helix execution remains a CI-time validation.