From 29ec808be2b105d0b11b5a0632b6adda980a9306 Mon Sep 17 00:00:00 2001 From: Thays Grazia Date: Thu, 5 Nov 2020 19:06:58 -0300 Subject: [PATCH] Implementing support to Debugger::Break. (#44305) --- src/mono/mono/mini/mini-wasm-debugger.c | 7 +++++++ src/mono/mono/mini/mini-wasm.h | 1 + src/mono/wasm/debugger/DebuggerTestSuite/Tests.cs | 17 +++++++++++++++++ .../wasm/debugger/tests/debugger-test/debugger-test2.cs | 9 ++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/mono/mono/mini/mini-wasm-debugger.c b/src/mono/mono/mini/mini-wasm-debugger.c index 15951e1..9ac0eb6 100644 --- a/src/mono/mono/mini/mini-wasm-debugger.c +++ b/src/mono/mono/mini/mini-wasm-debugger.c @@ -444,6 +444,7 @@ mono_wasm_debugger_init (void) objrefs = g_hash_table_new_full (NULL, NULL, NULL, mono_debugger_free_objref); mini_get_dbg_callbacks ()->handle_exception = handle_exception; + mini_get_dbg_callbacks ()->user_break = mono_wasm_user_break; } MONO_API void @@ -663,6 +664,12 @@ mono_wasm_breakpoint_hit (void) // mono_wasm_fire_bp (); } +void +mono_wasm_user_break (void) +{ + mono_wasm_fire_bp (); +} + EMSCRIPTEN_KEEPALIVE int mono_wasm_current_bp_id (void) { diff --git a/src/mono/mono/mini/mini-wasm.h b/src/mono/mono/mini/mini-wasm.h index ac35ed3..26a97ff 100644 --- a/src/mono/mono/mini/mini-wasm.h +++ b/src/mono/mono/mini/mini-wasm.h @@ -111,6 +111,7 @@ void mono_wasm_set_timeout (int timeout, int id); void mono_wasm_single_step_hit (void); void mono_wasm_breakpoint_hit (void); +void mono_wasm_user_break (void); int mono_wasm_assembly_already_added (const char *assembly_name); diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/Tests.cs b/src/mono/wasm/debugger/DebuggerTestSuite/Tests.cs index c53a60b..2ac3cb6 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/Tests.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/Tests.cs @@ -1158,6 +1158,23 @@ namespace DebuggerTests Assert.True(load_assemblies_res.IsOk); } + [Fact] + public async Task BreakOnDebuggerBreak() + { + 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); + await EvaluateAndCheck( + "window.setTimeout(function() { invoke_static_method_async('[debugger-test] UserBreak:BreakOnDebuggerBreakCommand'); }, 1);", + "dotnet://debugger-test.dll/debugger-test2.cs", 56, 4, + "BreakOnDebuggerBreakCommand"); + }); + } //TODO add tests covering basic stepping behavior as step in/out/over } } diff --git a/src/mono/wasm/debugger/tests/debugger-test/debugger-test2.cs b/src/mono/wasm/debugger/tests/debugger-test/debugger-test2.cs index 7275bf4..b9d97c8 100644 --- a/src/mono/wasm/debugger/tests/debugger-test/debugger-test2.cs +++ b/src/mono/wasm/debugger/tests/debugger-test/debugger-test2.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; - +using System.Diagnostics; public class Misc { //Only append content to this class as the test suite depends on line info public static int CreateObject(int foo, int bar) @@ -49,3 +49,10 @@ public class Fancy var d = usMin + usMax; } } + +public class UserBreak { + public static void BreakOnDebuggerBreakCommand() + { + Debugger.Break(); + } +} -- 2.7.4