From 99747ac57e8bd5ef2114907a4cc52a84c17bf43f Mon Sep 17 00:00:00 2001 From: monojenkins Date: Thu, 12 Mar 2020 23:44:52 -0400 Subject: [PATCH] [wasm][debugger] Continue SS after leaving managed code (#33272) Continue stepping over/into/out of managed code to native code, without this fix the behavior was resume when a SS leaves the managed code. Co-authored-by: thaystg --- src/mono/mono/mini/mini-wasm-debugger.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm-debugger.c b/src/mono/mono/mini/mini-wasm-debugger.c index 3e1715c..892d2dd 100644 --- a/src/mono/mono/mini/mini-wasm-debugger.c +++ b/src/mono/mono/mini/mini-wasm-debugger.c @@ -32,7 +32,7 @@ EMSCRIPTEN_KEEPALIVE int mono_wasm_current_bp_id (void); EMSCRIPTEN_KEEPALIVE void mono_wasm_enum_frames (void); EMSCRIPTEN_KEEPALIVE void mono_wasm_get_var_info (int scope, int* pos, int len); EMSCRIPTEN_KEEPALIVE void mono_wasm_clear_all_breakpoints (void); -EMSCRIPTEN_KEEPALIVE void mono_wasm_setup_single_step (int kind); +EMSCRIPTEN_KEEPALIVE int mono_wasm_setup_single_step (int kind); EMSCRIPTEN_KEEPALIVE void mono_wasm_get_object_properties (int object_id); EMSCRIPTEN_KEEPALIVE void mono_wasm_get_array_values (int object_id); @@ -349,7 +349,7 @@ mono_wasm_enable_debugging (void) debugger_enabled = TRUE; } -EMSCRIPTEN_KEEPALIVE void +EMSCRIPTEN_KEEPALIVE int mono_wasm_setup_single_step (int kind) { int nmodifiers = 1; @@ -388,6 +388,20 @@ mono_wasm_setup_single_step (int kind) DEBUG_PRINTF (1, "[dbg] Failed to setup single step request"); } DEBUG_PRINTF (1, "[dbg] single step is in place, now what?\n"); + SingleStepReq *ss_req = req->info; + int isBPOnNativeCode = 0; + if (ss_req && ss_req->bps) { + GSList *l; + + for (l = ss_req->bps; l; l = l->next) { + if (((MonoBreakpoint *)l->data)->method->wrapper_type != MONO_WRAPPER_RUNTIME_INVOKE) + isBPOnNativeCode = 1; + } + } + if (!isBPOnNativeCode) { + mono_de_cancel_ss (); + } + return isBPOnNativeCode; } EMSCRIPTEN_KEEPALIVE void -- 2.7.4