Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2017-11-01 01:39:43 +0300
committerGitHub <noreply@github.com>2017-11-01 01:39:43 +0300
commite0607c34f07e53f5bebe9671a31ef7bdd1390344 (patch)
treedf4e11e8e0682408db6e445b4c7bd0a23a51f6e4 /mcs/class/Mono.Debugger.Soft
parent08bb8da2cc0f041d9f822690284cdacd4a5b4cc5 (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/class/Mono.Debugger.Soft')
-rw-r--r--mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs3
-rw-r--r--mcs/class/Mono.Debugger.Soft/Test/dtest.cs4
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);