public void OnDebuggerProcessExit(/*OPTIONAL*/ string exitCode) { // GDB has exited. Cleanup. Only let one thread perform the cleanup if (Interlocked.CompareExchange(ref _exiting, 1, 0) == 0) { if (_consoleDebuggerInitializeCompletionSource != null) { lock (_waitingOperations) { if (_consoleDebuggerInitializeCompletionSource != null) { MIDebuggerInitializeFailedException exception = new MIDebuggerInitializeFailedException(this.MICommandFactory.Name, _initialErrors.ToList().AsReadOnly(), _initializationLog.ToList().AsReadOnly()); _initialErrors = null; _initializationLog = null; _consoleDebuggerInitializeCompletionSource.TrySetException(exception); } } } Close(); if (this.ProcessState != ProcessState.Exited) { if (DebuggerAbortedEvent != null) { DebuggerAbortedEvent(this, exitCode); } } else { if (DebuggerExitEvent != null) { DebuggerExitEvent(this, null); } } } }
public void OnDebuggerProcessExit(/*OPTIONAL*/ string exitCode) { // GDB has exited. Cleanup. Only let one thread perform the cleanup if (Interlocked.CompareExchange(ref _exiting, 1, 0) == 0) { if (_consoleDebuggerInitializeCompletionSource != null) { lock (_waitingOperations) { if (_consoleDebuggerInitializeCompletionSource != null) { MIDebuggerInitializeFailedException exception = new MIDebuggerInitializeFailedException(this.MICommandFactory.Name, _initialErrors.ToList().AsReadOnly(), _initializationLog.ToList().AsReadOnly()); _initialErrors = null; _initializationLog = null; _consoleDebuggerInitializeCompletionSource.TrySetException(exception); } } } string message; if (string.IsNullOrEmpty(exitCode)) message = string.Format(CultureInfo.CurrentCulture, MICoreResources.Error_MIDebuggerExited_UnknownCode, this.MICommandFactory.Name); else message = string.Format(CultureInfo.CurrentCulture, MICoreResources.Error_MIDebuggerExited_WithCode, this.MICommandFactory.Name, exitCode); Close(message); if (this.ProcessState != ProcessState.Exited) { if (DebuggerAbortedEvent != null) { DebuggerAbortedEvent(this, new DebuggerAbortedEventArgs(message, exitCode)); } } else { if (DebuggerExitEvent != null) { DebuggerExitEvent(this, null); } } } }