private void Init(CorDebug corDebug, bool fLaunch) { try { if (IsDebugging) throw new Exception("CorDebugProcess is already in debugging mode before Init() has run"); m_corDebug = corDebug; m_fLaunched = fLaunch; m_events = Queue.Synchronized(new Queue()); m_threads = new ArrayList(); m_assemblies = new ArrayList(); m_appDomains = new ArrayList(); m_breakpoints = ArrayList.Synchronized(new ArrayList()); m_fExecutionPaused = true; m_eventDispatch = new AutoResetEvent(false); m_eventExecutionPaused = new ManualResetEvent(true); m_eventProcessExited = new ManualResetEvent(false); m_eventsStopped = new EventWaitHandle[] { m_eventExecutionPaused, m_eventProcessExited }; m_fUpdateBreakpoints = false; m_cStopped = 0; m_fTerminating = false; m_cEvalThreads = 0; m_tdBuiltin = null; m_scratchPad = new ScratchPadArea(this); m_fakeAssemblyAddressNext = c_fakeAddressStart; m_threadDispatch = null; if (this.IsLocalWin32Process) { m_win32process = Process.GetProcessById((int)m_pid); m_win32process.EnableRaisingEvents = true; m_win32process.Exited += new EventHandler(OnProcessExit); } m_corDebug.RegisterProcess(this); } catch (Exception) { VsPackage.MessageCentre.DeploymentMsg(DiagnosticStrings.DeploymentErrorDeviceErrors); throw; } }
private void UnInit() { if (m_assemblies != null) { foreach (CorDebugAssembly assembly in m_assemblies) { ((IDisposable)assembly).Dispose(); } m_assemblies = null; } if(m_win32process != null) { m_win32process.EnableRaisingEvents = false; // If the process hasn't already exited, we'll wait another 2 sec and kill it. for (int i = 1; !m_win32process.HasExited && i <= 2; i++) { if (i == 1) { Thread.Yield(); } else { try { m_win32process.Kill(); } catch(Win32Exception) { } catch( NotSupportedException ) { } catch( InvalidOperationException ) { } } } m_win32process.Dispose(); m_win32process = null; } if (m_port != null) { m_port.RemoveProcess(this.m_portDefinition); m_port = null; } m_appDomains = null; m_events = null; m_threads = null; m_assemblyPaths = null; m_breakpoints = null; m_fExecutionPaused = false; m_eventDispatch = null; m_fUpdateBreakpoints = false; m_cStopped = 0; m_fLaunched = false; m_fTerminating = false; m_fDetaching = false; m_dummyThreadEvent = null; m_cEvalThreads = 0; m_tdBuiltin = null; m_scratchPad = null; m_threadDispatch = null; if (m_corDebug != null) { m_corDebug.UnregisterProcess(this); m_corDebug = null; } }
private void UnInit () { if (m_assemblies != null) { foreach (CorDebugAssembly assembly in m_assemblies) { ((IDisposable)assembly).Dispose (); } m_assemblies = null; } if (m_port != null) { m_port.RemoveProcess(PortDefinition); m_port = null; } m_appDomains = null; m_events = null; m_threads = null; m_assemblyPaths = null; m_breakpoints = null; m_fExecutionPaused = false; m_eventDispatch = null; m_fUpdateBreakpoints = false; m_cStopped = 0; m_fLaunched = false; m_fTerminating = false; m_fDetaching = false; m_cEvalThreads = 0; m_tdBuiltin = null; m_scratchPad = null; m_threadDispatch = null; if (m_corDebug != null) { m_corDebug.UnregisterProcess (this); m_corDebug = null; } }