diff --git a/src/mono/wasm/debugger/BrowserDebugProxy/DebugStore.cs b/src/mono/wasm/debugger/BrowserDebugProxy/DebugStore.cs index 99b08047e5424..8b0cd0a42480d 100644 --- a/src/mono/wasm/debugger/BrowserDebugProxy/DebugStore.cs +++ b/src/mono/wasm/debugger/BrowserDebugProxy/DebugStore.cs @@ -323,9 +323,16 @@ public SourceLocation GetLocationByIl(int pos) SequencePoint prev = null; foreach (SequencePoint sp in DebugInformation.SequencePoints) { - if (sp.Offset > pos) + if (sp.Offset > pos) { + //get the earlier line number if the offset is in a hidden sequence point and has a earlier line number available + // if is doesn't continue and get the next line number that is not in a hidden sequence point + if (sp.IsHidden && prev == null) + continue; break; - prev = sp; + } + + if (!sp.IsHidden) + prev = sp; } if (prev != null) diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/SteppingTests.cs b/src/mono/wasm/debugger/DebuggerTestSuite/SteppingTests.cs index 16cfe821c0907..d725395f267c2 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/SteppingTests.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/SteppingTests.cs @@ -1001,5 +1001,34 @@ await EvaluateAndCheck( await StepAndCheck(StepKind.Resume, source_file, 56, 12, "MoveNext"); }); } + + [Fact] + public async Task StepOverHiddenSequencePoint() + { + var insp = new Inspector(); + + //Collect events + var scripts = SubscribeToScripts(insp); + + await Ready(); + await insp.Ready(async (cli, token) => + { + ctx = new DebugTestContext(cli, insp, token, scripts); + + var bp = await SetBreakpointInMethod("debugger-test.dll", "HiddenSequencePointTest", "StepOverHiddenSP2", 0); + + var pause_location = await EvaluateAndCheck( + "window.setTimeout(function() { invoke_static_method ('[debugger-test] HiddenSequencePointTest:StepOverHiddenSP'); }, 1);", + "dotnet://debugger-test.dll/debugger-test.cs", 546, 4, + "StepOverHiddenSP2"); + + var top_frame = pause_location["callFrames"][1]; + Assert.Equal("StepOverHiddenSP", top_frame["functionName"].Value()); + Assert.Contains("debugger-test.cs", top_frame["url"].Value()); + + CheckLocation("dotnet://debugger-test.dll/debugger-test.cs", 537, 8, scripts, top_frame["location"]); + + }); + } } } diff --git a/src/mono/wasm/debugger/tests/debugger-test/debugger-test.cs b/src/mono/wasm/debugger/tests/debugger-test/debugger-test.cs index 633cba179f31a..b7021e2fdcd24 100644 --- a/src/mono/wasm/debugger/tests/debugger-test/debugger-test.cs +++ b/src/mono/wasm/debugger/tests/debugger-test/debugger-test.cs @@ -531,3 +531,20 @@ public static void LoadLazyAssembly(string asm_base64, string pdb_base64) Console.WriteLine($"Loaded - {loadedAssembly}"); } } + +public class HiddenSequencePointTest { + public static void StepOverHiddenSP() + { + Console.WriteLine("first line"); + #line hidden + Console.WriteLine("second line"); + StepOverHiddenSP2(); + #line default + Console.WriteLine("third line"); + + } + public static void StepOverHiddenSP2() + { + Console.WriteLine("StepOverHiddenSP2"); + } +}