diff options
author | Zoltan Varga <vargaz@gmail.com> | 2016-09-09 20:58:59 +0300 |
---|---|---|
committer | Zoltan Varga <vargaz@gmail.com> | 2016-09-09 20:58:59 +0300 |
commit | 7e3028c2c8164315251fd5f6b1eb82efdc6af7cc (patch) | |
tree | 3a90bf2f40faef3eb82a7e30272fb218b60e94ca /mcs/class/Mono.Debugger.Soft | |
parent | a81a6173b8d296170f74324bf12bbddaa07450f2 (diff) |
[sdb] Add a MethodMirror:GetScopes () method which returns scope information.
Diffstat (limited to 'mcs/class/Mono.Debugger.Soft')
4 files changed, 31 insertions, 1 deletions
diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft.dll.sources b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft.dll.sources index 9313227067d..3ea9e744843 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft.dll.sources +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft.dll.sources @@ -40,6 +40,7 @@ Mono.Debugger.Soft/BreakpointEventRequest.cs Mono.Debugger.Soft/MethodEntryEventRequest.cs Mono.Debugger.Soft/AssemblyLoadEventRequest.cs Mono.Debugger.Soft/LocalVariable.cs +Mono.Debugger.Soft/LocalScope.cs Mono.Debugger.Soft/ParameterInfoMirror.cs Mono.Debugger.Soft/Event.cs Mono.Debugger.Soft/EventSet.cs diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs index 05ea6bcdaf4..cf6bc23cb54 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs @@ -117,6 +117,8 @@ namespace Mono.Debugger.Soft public string[] names; public int[] live_range_start; public int[] live_range_end; + public int[] scopes_start; + public int[] scopes_end; } struct PropInfo { @@ -418,7 +420,7 @@ namespace Mono.Debugger.Soft * with newer runtimes, and vice versa. */ internal const int MAJOR_VERSION = 2; - internal const int MINOR_VERSION = 42; + internal const int MINOR_VERSION = 43; enum WPSuspendPolicy { NONE = 0, @@ -1910,6 +1912,20 @@ namespace Mono.Debugger.Soft var res = SendReceive (CommandSet.METHOD, (int)CmdMethod.GET_LOCALS_INFO, new PacketWriter ().WriteId (id)); LocalsInfo info = new LocalsInfo (); + + if (Version.AtLeast (2, 43)) { + int nscopes = res.ReadInt (); + info.scopes_start = new int [nscopes]; + info.scopes_end = new int [nscopes]; + Console.WriteLine ("A: "); + int last_start = 0; + for (int i = 0; i < nscopes; ++i) { + info.scopes_start [i] = last_start + res.ReadInt (); + info.scopes_end [i] = info.scopes_start [i] + res.ReadInt (); + last_start = info.scopes_start [i]; + } + } + int nlocals = res.ReadInt (); info.types = new long [nlocals]; for (int i = 0; i < nlocals; ++i) diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/MethodMirror.cs b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/MethodMirror.cs index 88dd7277c20..34bcb230ed7 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/MethodMirror.cs +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/MethodMirror.cs @@ -19,6 +19,7 @@ namespace Mono.Debugger.Soft ParameterInfoMirror[] param_info; ParameterInfoMirror ret_param; LocalVariable[] locals; + LocalScope[] scopes; IList<Location> locations; MethodBodyMirror body; MethodMirror gmd; @@ -239,6 +240,11 @@ namespace Mono.Debugger.Soft } } + public LocalScope[] GetScopes () { + GetLocals (); + return scopes; + } + public LocalVariable[] GetLocals () { if (locals == null) { LocalsInfo li = new LocalsInfo (); @@ -258,6 +264,10 @@ namespace Mono.Debugger.Soft for (int i = 0; i < li.names.Length; ++i) locals [i + pi.Length] = new LocalVariable (vm, this, i, li.types [i], li.names [i], li.live_range_start [i], li.live_range_end [i], false); + + scopes = new LocalScope [li.scopes_start.Length]; + for (int i = 0; i < scopes.Length; ++i) + scopes [i] = new LocalScope (vm, this, li.scopes_start [i], li.scopes_end [i]); } return locals; } diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs index 01843505177..1933fc5e827 100644 --- a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs +++ b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs @@ -1846,6 +1846,9 @@ public class DebuggerTests Assert.Fail (); } } + + var scopes = frame.Method.GetScopes (); + Assert.AreEqual (2, scopes.Length); } Event step_once () { |