/* * 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 (); }