From da69fcc7f6942ef78b580f755485c657bb659b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Karlas=CC=8C?= Date: Fri, 27 Jan 2017 11:17:15 +0100 Subject: [Ppdb] Support for reading CustomDebugInformation and more specifically AsyncMethodDebugInfo --- mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs | 48 +++++++++ mcs/class/Mono.Debugger.Soft/Test/dtest.cs | 136 +++++++++++++++++++++++++ 2 files changed, 184 insertions(+) (limited to 'mcs/class/Mono.Debugger.Soft') diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs index 1687bcbc72d..6cfa088437f 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs @@ -13,6 +13,7 @@ using System.Threading.Tasks; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; +using System.Threading.Tasks; using MonoTests.Helpers; public class TestsBase @@ -431,6 +432,7 @@ public class Tests : TestsBase, ITest2 ss_recursive_chaotic (); ss_fp_clobber (); ss_no_frames (); + ss_await (); } [MethodImplAttribute (MethodImplOptions.NoInlining)] @@ -717,6 +719,52 @@ public class Tests : TestsBase, ITest2 ss_no_frames_3 (); } + [MethodImplAttribute (MethodImplOptions.NoInlining)] + public static void ss_await () + { + ss_await_1 ().Wait ();//in + ss_await_1 ().Wait ();//over + ss_await_1 ().Wait ();//out before + ss_await_1 ().Wait ();//out after + ss_await_1_exc (true, true).Wait ();//in + ss_await_1_exc (true, true).Wait ();//over + ss_await_1_exc (true, true).Wait ();//out + try { + ss_await_1_exc (true, false).Wait ();//in + } catch { } + try { + ss_await_1_exc (true, false).Wait ();//over + } catch { } + try { + ss_await_1_exc (true, false).Wait ();//out + } catch { } + } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + public static async Task ss_await_1 () { + var a = 1; + await Task.Delay (10); + return a + 2; + } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + public static async Task ss_await_1_exc (bool exc, bool handled) + { + var a = 1; + await Task.Delay (10); + if (exc) { + if (handled) { + try { + throw new Exception (); + } catch { + } + } else { + throw new Exception (); + } + } + return a + 2; + } + [MethodImplAttribute (MethodImplOptions.NoInlining)] public static void ss_no_frames_2 () { } diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs index f6312cb1703..ce74b4fd5fb 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs @@ -943,6 +943,142 @@ public class DebuggerTests f = e.Thread.GetFrames ()[0]; AssertValue (7.0, f.GetValue (f.Method.GetParameters ()[0])); req.Disable (); + + e = run_until ("ss_await"); + e = step_in_await ("ss_await", e);//ss_await_1 ().Wait ();//in + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//var a = 1; + e = step_in_await ("MoveNext", e);//await Task.Delay (10); + e = step_in_await ("MoveNext", e);//return a + 2; + e = step_in_await ("MoveNext", e);//} + e = step_in_await ("ss_await", e);//ss_await_1 ().Wait ();//in + + e = step_in_await ("ss_await", e);//ss_await_1 ().Wait ();//over + e = step_in_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//var a = 1; + e = step_over_await ("MoveNext", e);//await Task.Delay (10); + e = step_over_await ("MoveNext", e);//return a + 2; + e = step_over_await ("MoveNext", e);//} + e = step_over_await ("ss_await", e);//ss_await_1 ().Wait ();//over + + e = step_in_await ("ss_await", e);//ss_await_1 ().Wait ();//out before + e = step_in_await ("MoveNext", e);//{ + e = step_out_await ("ss_await", e);//ss_await_1 ().Wait ();//out before + + e = step_in_await ("ss_await", e);//ss_await_1 ().Wait ();//out after + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//var a = 1; + e = step_in_await ("MoveNext", e);//await Task.Delay (10); + e = step_in_await ("MoveNext", e);//return a + 2; + e = step_out_await ("ss_await", e);//ss_await_1 ().Wait ();//out after + + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//in + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//var a = 1; + e = step_in_await ("MoveNext", e);//await Task.Delay (10); + e = step_in_await ("MoveNext", e);//if (exc) + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//if (handled) + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//try { + e = step_in_await ("MoveNext", e);//throw new Exception (); + e = step_in_await ("MoveNext", e);//catch + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//} + e = step_in_await ("MoveNext", e);//} + e = step_in_await ("MoveNext", e);//} + e = step_in_await ("MoveNext", e);//return a + 2; + e = step_in_await ("MoveNext", e);//} + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//in + + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//over + e = step_in_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//var a = 1; + e = step_over_await ("MoveNext", e);//await Task.Delay (10); + e = step_over_await ("MoveNext", e);//if (exc) + e = step_over_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//if (handled) + e = step_over_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//try { + e = step_over_await ("MoveNext", e);//throw new Exception (); + e = step_over_await ("MoveNext", e);//catch + e = step_over_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//} + e = step_over_await ("MoveNext", e);//} + e = step_over_await ("MoveNext", e);//} + e = step_over_await ("MoveNext", e);//return a + 2; + e = step_over_await ("MoveNext", e);//} + e = step_over_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//over + + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//out + e = step_in_await ("MoveNext", e);//{ + e = step_out_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//out + + e = step_in_await ("ss_await", e);//try { + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, false).Wait ();//in + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//var a = 1; + e = step_in_await ("MoveNext", e);//await Task.Delay (10); + e = step_in_await ("MoveNext", e);//if (exc) + e = step_in_await ("MoveNext", e);//{ + e = step_in_await ("MoveNext", e);//if (handled) + e = step_in_await ("MoveNext", e);//} else { + e = step_in_await ("MoveNext", e);//throw new Exception (); + e = step_in_await ("ss_await", e);//catch + e = step_in_await ("ss_await", e);//{ + e = step_in_await ("ss_await", e);//} + e = step_in_await ("ss_await", e);//try { + + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, false).Wait ();//over + e = step_in_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//var a = 1; + e = step_over_await ("MoveNext", e);//await Task.Delay (10); + e = step_over_await ("MoveNext", e);//if (exc) + e = step_over_await ("MoveNext", e);//{ + e = step_over_await ("MoveNext", e);//if (handled) + e = step_over_await ("MoveNext", e);//} else { + e = step_over_await ("MoveNext", e);//throw new Exception (); + e = step_over_await ("ss_await", e);//catch + e = step_over_await ("ss_await", e);//{ + e = step_over_await ("ss_await", e);//} + e = step_over_await ("ss_await", e);//try { + + e = step_in_await ("ss_await", e);//ss_await_1_exc (true, false).Wait ();//out + e = step_in_await ("MoveNext", e);//{ + e = step_out_await ("ss_await", e);//ss_await_1_exc (true, true).Wait ();//out + } + + Event step_in_await (string method, Event e) + { + if (step_req != null) + step_req.Disable (); + create_step (e); + step_req.AssemblyFilter = new List () { entry_point.DeclaringType.Assembly }; + var ef = step_into (); + assert_location (ef, method); + return ef; + } + + Event step_over_await (string method, Event e) + { + if (step_req != null) + step_req.Disable (); + create_step (e); + step_req.AssemblyFilter = new List () { entry_point.DeclaringType.Assembly }; + var ef = step_over (); + assert_location (ef, method); + return ef; + } + + Event step_out_await (string method, Event e) + { + if (step_req != null) + step_req.Disable (); + create_step (e); + step_req.AssemblyFilter = new List () { entry_point.DeclaringType.Assembly }; + var ef = step_out (); + assert_location (ef, method); + return ef; } [Test] -- cgit v1.2.3