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)
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<string>());
+ Assert.Contains("debugger-test.cs", top_frame["url"].Value<string>());
+
+ CheckLocation("dotnet://debugger-test.dll/debugger-test.cs", 537, 8, scripts, top_frame["location"]);
+
+ });
+ }
}
}
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");
+ }
+}