return ERR_INVALID_ARGUMENT;
}
- locals = mono_debug_lookup_locals (method, FALSE);
+ locals = mono_debug_lookup_locals (method);
if (!locals) {
if (CHECK_PROTOCOL_VERSION (2, 43)) {
/* Scopes */
pos = - pos - 1;
cmd_stack_frame_get_parameter (frame, sig, pos, buf, jit);
} else {
- MonoDebugLocalsInfo *locals;
-
- locals = mono_debug_lookup_locals (frame->de.method, TRUE);
- if (locals) {
- g_assert (pos < locals->num_locals);
- pos = locals->locals [pos].index;
- mono_debug_free_locals (locals);
+ if (!CHECK_PROTOCOL_VERSION (2, 59)) { //from newer protocol versions it's sent the pdb index
+ MonoDebugLocalsInfo *locals;
+ locals = mono_debug_lookup_locals (frame->de.method);
+ if (locals) {
+ g_assert (pos < locals->num_locals);
+ pos = locals->locals [pos].index;
+ mono_debug_free_locals (locals);
+ }
}
PRINT_DEBUG_MSG (4, "[dbg] send local %d.\n", pos);
var = &jit->params [pos];
is_arg = TRUE;
} else {
- MonoDebugLocalsInfo *locals;
-
- locals = mono_debug_lookup_locals (frame->de.method, TRUE);
- if (locals) {
- g_assert (pos < locals->num_locals);
- pos = locals->locals [pos].index;
- mono_debug_free_locals (locals);
+ if (!CHECK_PROTOCOL_VERSION (2, 59)) { //from newer protocol versions it's sent the pdb index
+ MonoDebugLocalsInfo *locals;
+ locals = mono_debug_lookup_locals (frame->de.method);
+ if (locals) {
+ g_assert (pos < locals->num_locals);
+ pos = locals->locals [pos].index;
+ mono_debug_free_locals (locals);
+ }
}
g_assert (pos >= 0 && pos < jit->num_locals);
* The result should be freed using mono_debug_free_locals ().
*/
MonoDebugLocalsInfo*
-mono_debug_lookup_locals (MonoMethod *method, mono_bool ignore_pdb)
+mono_debug_lookup_locals (MonoMethod *method)
{
MonoDebugMethodInfo *minfo;
MonoDebugLocalsInfo *res;
return NULL;
}
- if (ignore_pdb)
- res = mono_debug_symfile_lookup_locals (minfo);
- else {
- if (minfo->handle->ppdb) {
- res = mono_ppdb_lookup_locals (minfo);
- } else {
- if (!minfo->handle->symfile || !mono_debug_symfile_is_loaded (minfo->handle->symfile))
- res = NULL;
- else
- res = mono_debug_symfile_lookup_locals (minfo);
- }
+
+ if (minfo->handle->ppdb) {
+ res = mono_ppdb_lookup_locals (minfo);
+ } else {
+ if (!minfo->handle->symfile || !mono_debug_symfile_is_loaded (minfo->handle->symfile))
+ res = NULL;
+ else
+ res = mono_debug_symfile_lookup_locals (minfo);
}
+
mono_debugger_unlock ();
return res;
mono_debug_add_delegate_trampoline (void* code, int size);
MONO_API MonoDebugLocalsInfo*
-mono_debug_lookup_locals (MonoMethod *method, mono_bool ignore_pdb);
+mono_debug_lookup_locals (MonoMethod *method);
MONO_API MonoDebugMethodAsyncInfo*
mono_debug_lookup_method_async_debug_info (MonoMethod *method);
g_free (names);
/* Locals */
- locals_info = mono_debug_lookup_locals (method, FALSE);
+ locals_info = mono_debug_lookup_locals (method);
for (i = 0; i < header->num_locals; ++i) {
MonoInst *ins = locals [i];
}, "t_props", num_fields: 53);
});
+
+ [Fact]
+ public async Task InspectLocalsWithIndexAndPositionWithDifferentValues() //https://github.com/xamarin/xamarin-android/issues/6161
+ {
+ await EvaluateAndCheck(
+ "window.setTimeout(function() { invoke_static_method('[debugger-test] MainPage:CallSetValue'); }, 1);",
+ "dotnet://debugger-test.dll/debugger-test.cs", 758, 16,
+ "set_SomeValue",
+ locals_fn: (locals) =>
+ {
+ CheckNumber(locals, "view", 150);
+ }
+ );
+ }
+
//TODO add tests covering basic stepping behavior as step in/out/over
}
}
Console.WriteLine($"time for await");
return true;
}
+
+}
+
+public class MainPage
+{
+ public MainPage()
+ {
+ }
+
+ int count = 0;
+ private int someValue;
+
+ public int SomeValue
+ {
+ get
+ {
+ return someValue;
+ }
+ set
+ {
+ someValue = value;
+ count++;
+
+ if (count == 10)
+ {
+ var view = 150;
+
+ if (view != 50)
+ {
+
+ }
+ System.Diagnostics.Debugger.Break();
+ }
+
+ SomeValue = count;
+ }
+ }
+
+ public static void CallSetValue()
+ {
+ var mainPage = new MainPage();
+ mainPage.SomeValue = 10;
+ }
}