Exemple #1
0
        void TheDebugger_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            var dbg = (DnDebugger)sender;

            switch (dbg.ProcessState)
            {
            case DebuggerProcessState.Starting:
                if (outputLoggerSettings.ShowDebugOutputLog)
                {
                    outputService.Select(GUID_OUTPUT_LOGGER_DEBUG);
                }

                debugState?.Dispose();
                debugState = null;

                textPane.Clear();
                dbg.DebugCallbackEvent += DnDebugger_DebugCallbackEvent;
                debugState              = new DebugState(dbg);
                break;

            case DebuggerProcessState.Continuing:
            case DebuggerProcessState.Running:
            case DebuggerProcessState.Paused:
                Debug.Assert(debugState != null && debugState.dbg == dbg);
                break;

            case DebuggerProcessState.Terminated:
                Debug.Assert(debugState != null);
                Debug.Assert(debugState?.dbg == dbg);

                if (outputLoggerSettings.ShowProcessExitMessages)
                {
                    int processExitCode;
                    if (!NativeMethods.GetExitCodeProcess(debugState.hProcess_debuggee, out processExitCode))
                    {
                        processExitCode = -1;
                    }
                    textPane.WriteLine(BoxedTextColor.DebugLogExitProcess,
                                       string.Format(dnSpy_Debugger_Resources.DebugLogExitProcess,
                                                     GetProcessNameWithPID(debugState.debuggedProcess),
                                                     processExitCode));
                }

                debugState?.Dispose();
                debugState = null;
                break;
            }
        }