diff options
author | David Karlaš <david.karlas@xamarin.com> | 2017-01-27 13:17:15 +0300 |
---|---|---|
committer | David Karlaš <david.karlas@xamarin.com> | 2017-01-27 13:17:57 +0300 |
commit | da69fcc7f6942ef78b580f755485c657bb659b47 (patch) | |
tree | 1d27adde468f544e654bc3be562bd76b75189a57 /mcs/class/Mono.Debugger.Soft | |
parent | 8a8e9532b4a9ffab9c7ffb0243adb12856cc2a7a (diff) |
[Ppdb] Support for reading CustomDebugInformation and more specifically AsyncMethodDebugInfo
Diffstat (limited to 'mcs/class/Mono.Debugger.Soft')
-rw-r--r-- | mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs | 48 | ||||
-rw-r--r-- | mcs/class/Mono.Debugger.Soft/Test/dtest.cs | 136 |
2 files changed, 184 insertions, 0 deletions
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)] @@ -718,6 +720,52 @@ public class Tests : TestsBase, ITest2 } [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<int> ss_await_1 () { + var a = 1; + await Task.Delay (10); + return a + 2; + } + + [MethodImplAttribute (MethodImplOptions.NoInlining)] + public static async Task<int> 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<AssemblyMirror> () { 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<AssemblyMirror> () { 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<AssemblyMirror> () { entry_point.DeclaringType.Assembly }; + var ef = step_out (); + assert_location (ef, method); + return ef; } [Test] |