Ejemplo n.º 1
0
 /*
  * EVENTS
  */
 internal int EnableEvent(EventType etype, SuspendPolicy suspend_policy, List<Modifier> mods)
 {
     var w = new PacketWriter ().WriteByte ((byte)etype).WriteByte ((byte)suspend_policy);
     if (mods != null) {
         if (mods.Count > 255)
             throw new NotImplementedException ();
         w.WriteByte ((byte)mods.Count);
         foreach (Modifier mod in mods) {
             if (mod is CountModifier) {
                 w.WriteByte ((byte)ModifierKind.COUNT);
                 w.WriteInt ((mod as CountModifier).Count);
             } else if (mod is LocationModifier) {
                 w.WriteByte ((byte)ModifierKind.LOCATION_ONLY);
                 w.WriteId ((mod as LocationModifier).Method);
                 w.WriteLong ((mod as LocationModifier).Location);
             } else if (mod is StepModifier) {
                 w.WriteByte ((byte)ModifierKind.STEP);
                 w.WriteId ((mod as StepModifier).Thread);
                 w.WriteInt ((mod as StepModifier).Size);
                 w.WriteInt ((mod as StepModifier).Depth);
                 if (Version.AtLeast (2, 16))
                     w.WriteInt ((mod as StepModifier).Filter);
             } else if (mod is ThreadModifier) {
                 w.WriteByte ((byte)ModifierKind.THREAD_ONLY);
                 w.WriteId ((mod as ThreadModifier).Thread);
             } else if (mod is ExceptionModifier) {
                 var em = mod as ExceptionModifier;
                 w.WriteByte ((byte)ModifierKind.EXCEPTION_ONLY);
                 w.WriteId (em.Type);
                 if (Version.MajorVersion > 2 || Version.MinorVersion > 0) {
                     /* This is only supported in protocol version 2.1 */
                     w.WriteBool (em.Caught);
                     w.WriteBool (em.Uncaught);
                 } else if (!em.Caught || !em.Uncaught) {
                     throw new NotSupportedException ("This request is not supported by the protocol version implemented by the debuggee.");
                 }
                 if (Version.MajorVersion > 2 || Version.MinorVersion > 24) {
                     w.WriteBool (em.Subclasses);
                 } else if (!em.Subclasses) {
                     throw new NotSupportedException ("This request is not supported by the protocol version implemented by the debuggee.");
                 }
             } else if (mod is AssemblyModifier) {
                 w.WriteByte ((byte)ModifierKind.ASSEMBLY_ONLY);
                 var amod = (mod as AssemblyModifier);
                 w.WriteInt (amod.Assemblies.Length);
                 foreach (var id in amod.Assemblies)
                     w.WriteId (id);
             } else if (mod is SourceFileModifier) {
                 w.WriteByte ((byte)ModifierKind.SOURCE_FILE_ONLY);
                 var smod = (mod as SourceFileModifier);
                 w.WriteInt (smod.SourceFiles.Length);
                 foreach (var s in smod.SourceFiles)
                     w.WriteString (s);
             } else if (mod is TypeNameModifier) {
                 w.WriteByte ((byte)ModifierKind.TYPE_NAME_ONLY);
                 var tmod = (mod as TypeNameModifier);
                 w.WriteInt (tmod.TypeNames.Length);
                 foreach (var s in tmod.TypeNames)
                     w.WriteString (s);
             } else {
                 throw new NotImplementedException ();
             }
         }
     } else {
         w.WriteByte (0);
     }
     return SendReceive (CommandSet.EVENT_REQUEST, (int)CmdEventRequest.SET, w).ReadInt ();
 }