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:
authorDavid Karlaš <david.karlas@xamarin.com>2017-01-27 13:17:15 +0300
committerDavid Karlaš <david.karlas@xamarin.com>2017-01-27 13:17:57 +0300
commitda69fcc7f6942ef78b580f755485c657bb659b47 (patch)
tree1d27adde468f544e654bc3be562bd76b75189a57 /mcs/class/Mono.Debugger.Soft
parent8a8e9532b4a9ffab9c7ffb0243adb12856cc2a7a (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.cs48
-rw-r--r--mcs/class/Mono.Debugger.Soft/Test/dtest.cs136
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]