test: SourceLink F11 step-into verification (#214) - #313
Merged
Conversation
Proves the debugger half of SourceLink end-to-end: sourcelink.yaml already checks that every PDB document resolves to real GitHub content; this drives an actual debugger step-into and asserts it lands in the library's real source, not a decompiled placeholder. .github/workflows/sourcelink-stepinto.yaml (scheduled weekly + workflow_dispatch, not a PR gate) builds a fixture consumer, installs netcoredbg, and runs verify_stepinto.py — which drives netcoredbg over its MI interface to break in the consumer, step into Report's constructor, and assert the frame is the library's SourceLink-mapped source (/_/src/Wolfgang.Etl.Abstractions/Report.cs) with symbols loaded. Uses a ProjectReference built with ContinuousIntegrationBuild=true (byte-identical SourceLink PDB to the shipped package; netcoredbg can't pair a package assembly with its .snupkg PDB) and Debug/Optimize=false so the target isn't inlined. An empty Directory.Build.props/.targets isolates the fixture from repo analyzers. Validated locally end to end (netcoredbg 3.1.2-1054, net10.0): step-into resolved /_/src/Wolfgang.Etl.Abstractions/Report.cs, symbols-loaded=1, RESULT=PASS. Closes #214 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Jul 24, 2026
This was referenced Aug 5, 2026
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.
Summary
Proves the debugger half of SourceLink end-to-end (issue #214).
sourcelink.yamlalready verifies every PDB document resolves to real GitHub content viadotnet sourcelink test; this drives an actual debugger step-into and asserts it lands in the library's real source — the exact thing a consumer pressing F11 relies on — not a decompiled placeholder..github/workflows/sourcelink-stepinto.yaml(scheduled weekly +workflow_dispatch, not a PR gate) builds a fixture consumer, installs netcoredbg, and runs the driver..github/sourcelink/verify_stepinto.pydrives netcoredbg over its MI interface: break in the consumer →-exec-step→ assert the resulting frame is the library's SourceLink-mapped source with symbols loaded. Non-zero exit if it lands with no source (decompiled)..github/sourcelink/consumer/— a minimal fixture:ProjectReferencebuiltContinuousIntegrationBuild=true(byte-identical SourceLink PDB to the shipped package — netcoredbg can't pair a package assembly with its.snupkgPDB),Debug/Optimize=falseso the target isn't inlined, and emptyDirectory.Build.props/.targetsto isolate it from the repo analyzers. Step-into target:new Report(42).Validation
Ran the whole flow locally (netcoredbg 3.1.2-1054, net10.0):
i.e. the debugger stepped into
Report's constructor at the deterministic SourceLink path withsymbols-loaded=1— real source, not decompiled.Acceptance criteria (#214)
RESULT=FAIL reason=…).snupkgsymbol-server path is covered bysourcelink.yaml(netcoredbg can't script package symbols — documented in the fixture README)Scheduled/manual only, so it doesn't run on this PR; validated locally as above.
Closes #214