Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/mono/mono/component/debugger-agent.c
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,9 @@ static int objref_id = 0;

static int event_request_id = 0;

#ifndef TARGET_WASM
static int frame_id = 0;
#endif

static GPtrArray *event_requests;

Expand Down Expand Up @@ -3026,7 +3028,7 @@ compute_frame_info (MonoInternalThread *thread, DebuggerTlsData *tls, gboolean f
{
ComputeFramesUserData user_data;
GSList *tmp;
int i, findex, new_frame_count;
int findex, new_frame_count;
StackFrame **new_frames, *f;
MonoUnwindOptions opts = (MonoUnwindOptions)(MONO_UNWIND_DEFAULT | MONO_UNWIND_REG_LOCATIONS);

Expand Down Expand Up @@ -3085,6 +3087,8 @@ compute_frame_info (MonoInternalThread *thread, DebuggerTlsData *tls, gboolean f
for (tmp = user_data.frames; tmp; tmp = tmp->next) {
f = (StackFrame *)tmp->data;

#ifndef TARGET_WASM
int i;
/*
* Reuse the id for already existing stack frames, so invokes don't invalidate
* the still valid stack frames.
Expand All @@ -3098,7 +3102,9 @@ compute_frame_info (MonoInternalThread *thread, DebuggerTlsData *tls, gboolean f

if (i >= tls->frame_count)
f->id = mono_atomic_inc_i32 (&frame_id);

#else //keep the same behavior that we have for wasm before start using debugger-agent
f->id = findex+1;
#endif
new_frames [findex ++] = f;
}

Expand Down
20 changes: 20 additions & 0 deletions src/mono/wasm/debugger/DebuggerTestSuite/SteppingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -928,5 +928,25 @@ await EvaluateAndCheck(
await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", 719, 8, "MoveNext");
await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", 720, 4, "MoveNext");
}

[Fact]
public async Task CheckResetFrameNumberForEachStep()
{
var bp_conditional = await SetBreakpointInMethod("debugger-test.dll", "SteppingInto", "MethodToStep", 1);
await EvaluateAndCheck(
"window.setTimeout(function() { invoke_static_method('[debugger-test] SteppingInto:MethodToStep'); }, 1);",
"dotnet://debugger-test.dll/debugger-test.cs",
bp_conditional.Value["locations"][0]["lineNumber"].Value<int>(),
bp_conditional.Value["locations"][0]["columnNumber"].Value<int>(),
"MethodToStep"
);
var pause_location = await StepAndCheck(StepKind.Into, "dotnet://debugger-test.dll/debugger-test.cs", 799, 4, "Increment");
pause_location = await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", 800, 8, "Increment");
Assert.Equal(pause_location["callFrames"][0]["callFrameId"], "dotnet:scope:1");
pause_location = await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", 801, 8, "Increment");
Assert.Equal(pause_location["callFrames"][0]["callFrameId"], "dotnet:scope:1");
pause_location = await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", 806, 8, "Increment");
Assert.Equal(pause_location["callFrames"][0]["callFrameId"], "dotnet:scope:1");
}
}
}
25 changes: 25 additions & 0 deletions src/mono/wasm/debugger/tests/debugger-test/debugger-test.cs
Original file line number Diff line number Diff line change
Expand Up @@ -782,3 +782,28 @@ public static void LoopToBreak()
}
}

public class SteppingInto
{
static int currentCount = 0;
static MyIncrementer incrementer = new MyIncrementer();
public static void MethodToStep()
{
currentCount = incrementer.Increment(currentCount);
}
}

public class MyIncrementer
{
private Func<DateTime> todayFunc = () => DateTime.Now;

public int Increment(int count)
{
var today = todayFunc();
if (today.DayOfWeek == DayOfWeek.Sunday)
{
return count + 2;
}

return count + 1;
}
}