diff options
author | Zoltan Varga <vargaz@gmail.com> | 2017-11-01 01:39:43 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-01 01:39:43 +0300 |
commit | e0607c34f07e53f5bebe9671a31ef7bdd1390344 (patch) | |
tree | df4e11e8e0682408db6e445b4c7bd0a23a51f6e4 /mcs | |
parent | 08bb8da2cc0f041d9f822690284cdacd4a5b4cc5 (diff) |
Debugger support for the interpreter (#5902)
* [interp] Add infrastructure code needed for unified exception handling between the interpreter and the JIT.
* Pass the clause to mono_interp_set_resume_state ().
* Add a mono_interp_run_filter () function to run filter clauses.
* Add a 'ji' field to ExceptionTraceIp which is used to avoid an ip->ji lookup in ves_icall_get_trace ().
* Rename mono_handle_exception_internal_first_pass () to handle_exception_first_pass () and make it return the
StackFrameInfo for the frame which caught the exception.
This allows the removal of the duplicate and hard to understand interpreter EH code
and makes it easier to add debugger support to the intepreter.
* [sdb] Pass the already computed StackFrameInfo to mono_debugger_agent_handle_exception () so it doesn't have to be recomputed in ss_create (). This approach works both for the JIT and the interpreter.
* [interp] Generate seq points for async methods too.
* [interp] Rename ves_exec_method_with_context () to interp_exec_method_full (), add a interp_exec_method () helper with less arguments.
* [interp] Set ctx->sp for interpreter frames to the address of the InterpFrame structure, code in debugger-agent.c uses it to order frames.
* [sdb] Fix the support for filter clauses in the interpreter by running them in a new interpreter frame.
* [sdb] Add DEBUGGER_INVOKE frames for the interpreter.
* [interp] Add a mono_interp_frame_get_parent () function, use that instead of the 'new_sp' argument to mono_interp_frame_iter_next ().
* [sdb] Run the test code for the ClassLocalReflection () test only for that test since it doesn't work with the interpreter.
* [interp] Fix the build.
Diffstat (limited to 'mcs')
-rw-r--r-- | mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs | 3 | ||||
-rw-r--r-- | mcs/class/Mono.Debugger.Soft/Test/dtest.cs | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs index d2b408a68ed..82efc79e51d 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs @@ -343,7 +343,8 @@ public class Tests : TestsBase, ITest2 gc_suspend (); set_ip (); step_filters (); - local_reflect (); + if (args.Length > 0 && args [0] == "local-reflect") + local_reflect (); if (args.Length > 0 && args [0] == "domain-test") /* This takes a lot of time, so execute it conditionally */ domains (); diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs index b9cc720155d..ccd3b6b7602 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs @@ -560,6 +560,10 @@ public class DebuggerTests [Test] public void ClassLocalReflection () { + vm.Detach (); + + Start (new string [] { "dtest-app.exe", "local-reflect" }); + MethodMirror m = entry_point.DeclaringType.Assembly.GetType ("LocalReflectClass").GetMethod ("RunMe"); Assert.IsNotNull (m); |