/// <summary> /// If subclasses do an async connect in OnRun, they should pass the resulting VM to this method. /// If the vm is null, the session will be closed. /// </summary> void ConnectionStarted (VirtualMachine vm) { if (this.vm != null) throw new InvalidOperationException ("The VM has already connected"); if (vm == null) { EndSession (); return; } connectionHandle = null; this.vm = vm; //full paths, from GetSourceFiles (true), are only supported by sdb protocol 2.2 and later var version = vm.Version; if (version.MajorVersion <= 2 && version.MinorVersion < 2) useFullPaths = false; ConnectOutput (vm.StandardOutput, false); ConnectOutput (vm.StandardError, true); OnConnectionStarted (); vm.EnableEvents (EventType.AssemblyLoad, EventType.TypeLoad, EventType.ThreadStart, EventType.ThreadDeath, EventType.AssemblyUnload); try { unhandledExceptionRequest = vm.CreateExceptionRequest (null, false, true); unhandledExceptionRequest.Enable (); } catch (NotSupportedException) { //Mono < 2.6.3 doesn't support catching unhandled exceptions } OnStarted (); started = true; /* Wait for the VMStart event */ HandleEventSet (vm.GetNextEventSet ()); eventHandler = new Thread (EventHandler); eventHandler.Name = "SDB event handler"; eventHandler.Start (); }
/// <summary> /// If subclasses do an async connect in OnRun, they should pass the resulting VM to this method. /// If the vm is null, the session will be closed. /// </summary> void ConnectionStarted (VirtualMachine vm) { if (this.vm != null) throw new InvalidOperationException ("The VM has already connected"); if (vm == null) { EndSession (); return; } connectionHandle = null; this.vm = vm; //full paths, from GetSourceFiles (true), are only supported by sdb protocol 2.2 and later useFullPaths = vm.Version.AtLeast (2, 2); ConnectOutput (vm.StandardOutput, false); ConnectOutput (vm.StandardError, true); HideConnectionDialog (); vm.EnableEvents (EventType.AssemblyLoad, EventType.ThreadStart, EventType.ThreadDeath, EventType.AssemblyUnload, EventType.UserBreak, EventType.UserLog); try { unhandledExceptionRequest = vm.CreateExceptionRequest (null, false, true); if (assemblyFilters != null && assemblyFilters.Count > 0) unhandledExceptionRequest.AssemblyFilter = assemblyFilters; unhandledExceptionRequest.Enable (); } catch (NotSupportedException) { //Mono < 2.6.3 doesn't support catching unhandled exceptions } if (vm.Version.AtLeast (2, 9)) { /* Created later */ } else { vm.EnableEvents (EventType.TypeLoad); } started = true; /* Wait for the VMStart event */ HandleEventSet (vm.GetNextEventSet ()); eventHandler = new Thread (EventHandler); eventHandler.Name = "SDB event handler"; eventHandler.Start (); }
private HandlerAction DoVMStartEvent(VMStartEvent e) { NSApplication.sharedApplication().BeginInvoke(() => m_debugger.OnVMStarted()); m_exceptionRequest = m_debugger.VM.CreateExceptionRequest(null); if (DebuggerWindows.BreakOnExceptions) m_exceptionRequest.Enable(); return HandlerAction.Suspend; }
/// <summary> /// If subclasses do an async connect in OnRun, they should pass the resulting VM to this method. /// If the vm is null, the session will be closed. /// </summary> protected void HandleConnection (VirtualMachine vm) { if (this.vm != null) throw new InvalidOperationException ("The VM has already connected"); if (vm == null) { EndSession (); return; } connectionHandle = null; this.vm = vm; ConnectOutput (vm.StandardOutput, false); ConnectOutput (vm.StandardError, true); OnConnected (); vm.EnableEvents (EventType.AssemblyLoad, EventType.TypeLoad, EventType.ThreadStart, EventType.ThreadDeath, EventType.AssemblyUnload); try { unhandledExceptionRequest = vm.CreateExceptionRequest (null, false, true); unhandledExceptionRequest.Enable (); } catch (NotSupportedException) { //Mono < 2.6.3 doesn't support catching unhandled exceptions } OnStarted (); started = true; /* Wait for the VMStart event */ HandleEvent (vm.GetNextEvent ()); eventHandler = new Thread (EventHandler); eventHandler.Name = "SDB event handler"; eventHandler.Start (); }
private void DoReset() { foreach (ResolvedBreakpoint resolved in m_breakpoints.Keys) { NSApplication.sharedApplication().BeginInvoke(() => m_debugger.OnUnresolvedBreakpoint(resolved.BreakPoint)); } m_exceptionRequest = null; m_breakpoints.Clear(); m_types.Clear(); }