private void HandleEvalEvent(ICorDebugAppDomain pAppDomain, ICorDebugThread pThread, ICorDebugEval pEval)
        {
            var domain = GetProcessWrapper(pAppDomain).GetAppDomain(pAppDomain);
            var thread = domain.GetThread(pThread);
            var eval = Session.ComInstanceCollector.GetWrapper<RuntimeEvaluation>(pEval);

            var eventArgs = new DebuggerEventArgs(domain, true);
            eval.DispatchEvaluationCompleted(eventArgs);
            FinalizeEvent(eventArgs);
        }
        private void HandleEvent(ICorDebugController controller, bool finalize = true)
        {
            var process = GetProcessWrapper(controller);
            var eventArgs = new DebuggerEventArgs(process.GetController(controller), true);

            process.DispatchEvent(eventArgs);

            if (finalize)
                FinalizeEvent(eventArgs);
        }
Esempio n. 3
0
        void DebuggerService_DebugEvent(object sender, DebuggerEventArgs e)
        {
            switch (e.DebuggerEvent)
            {
            case DebuggerEvent.Started:
                MainWindow.Instance.SessionSettings.FilterSettings.ShowInternalApi = true;
                SetRunningStatusMessage();
                MainWindow.Instance.SetDebugging();
                break;

            case DebuggerEvent.Stopped:
                MainWindow.Instance.HideStatus();
                MainWindow.Instance.ClearDebugging();
                break;

            case DebuggerEvent.Paused:
            case DebuggerEvent.Resumed:
            case DebuggerEvent.ProcessSelected:
                OnProcessRunningChanged();
                break;
            }
        }
Esempio n. 4
0
        void TheDebugger_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            var dbg = (DnDebugger)sender;

            switch (theDebugger.ProcessState)
            {
            case DebuggerProcessState.Starting:
                Collection.Clear();
                InstallDebuggerHooks(dbg);
                break;

            case DebuggerProcessState.Continuing:
            case DebuggerProcessState.Running:
            case DebuggerProcessState.Paused:
                break;

            case DebuggerProcessState.Terminated:
                UninstallDebuggerHooks(dbg);
                Collection.Clear();
                break;
            }
        }
Esempio n. 5
0
        void TheDebugger_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            var state = theDebugger.ProcessState;

            switch (state)
            {
            case DebuggerProcessState.Starting:
                InitializeHexStream();
                break;

            case DebuggerProcessState.Continuing:
            case DebuggerProcessState.Running:
            case DebuggerProcessState.Paused:
                break;

            case DebuggerProcessState.Terminated:
                InitializeHexStream();
                break;
            }

            InitializeMemory();
        }
Esempio n. 6
0
        static void OnDebugEvent(object sender, DebuggerEventArgs e)
        {
            switch (e.DebuggerEvent)
            {
            case DebuggerEvent.Resumed:
                SelectedFrame = 0;
                foreach (var textView in MainWindow.Instance.AllVisibleTextViews)
                {
                    Remove(textView);
                }
                break;

            case DebuggerEvent.Stopped:
            case DebuggerEvent.Paused:
                SelectedFrame = 0;
                foreach (var textView in MainWindow.Instance.AllVisibleTextViews)
                {
                    UpdateReturnStatementBookmarks(textView, false);
                }
                break;
            }
        }
Esempio n. 7
0
        void TheDebugger_OnProcessStateChanged2(object sender, DebuggerEventArgs e)
        {
            var dbg = (DnDebugger)sender;

            switch (theDebugger.ProcessState)
            {
            case DebuggerProcessState.Starting:
                classLoader = new ClassLoader(fileTabManager, appWindow.MainWindow);
                dbg.OnCorModuleDefCreated += DnDebugger_OnCorModuleDefCreated;
                dbg.DebugCallbackEvent    += DnDebugger_DebugCallbackEvent;
                dbg.OnModuleAdded         += DnDebugger_OnModuleAdded;
                break;

            case DebuggerProcessState.Continuing:
            case DebuggerProcessState.Running:
                break;

            case DebuggerProcessState.Stopped:
                if (dbg.IsEvaluating)
                {
                    break;
                }

                LoadNewClasses();
                ReloadInMemoryModulesFromMemory();
                if (DynamicModulesLoaded != null)
                {
                    DynamicModulesLoaded(this, EventArgs.Empty);
                }
                break;

            case DebuggerProcessState.Terminated:
                classLoader = null;
                break;
            }
        }
Esempio n. 8
0
        void DebugManager_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            var oldState = currentState;

            currentState = new CurrentState();
            var dbg = (DnDebugger)sender;

            switch (DebugManager.Instance.ProcessState)
            {
            case DebuggerProcessState.Starting:
                savedEvalState = null;
                break;

            case DebuggerProcessState.Running:
                if (dbg.IsEvaluating && savedEvalState == null)
                {
                    savedEvalState = oldState;
                }
                if (!dbg.IsEvaluating)
                {
                    ClearStackFrameLines();
                }
                break;

            case DebuggerProcessState.Stopped:
                if (dbg.IsEvaluating)
                {
                    break;
                }

                // Don't update the selected thread if we just evaluated something
                if (UpdateState(savedEvalState))
                {
                    currentState.Thread = DebugManager.Instance.Debugger.Current.Thread;
                    SelectedFrameNumber = 0;
                }
                else
                {
                    currentState = savedEvalState;
                }
                savedEvalState = null;

                foreach (var textView in MainWindow.Instance.AllVisibleTextViews)
                {
                    UpdateStackFrameLines(textView, false);
                }
                break;

            case DebuggerProcessState.Terminated:
                savedEvalState = null;
                ClearStackFrameLines();
                break;

            default:
                throw new InvalidOperationException();
            }

            if (StackFramesUpdated != null)
            {
                StackFramesUpdated(this, new StackFramesUpdatedEventArgs(dbg));
            }
        }
Esempio n. 9
0
        void TheDebugger_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            var oldState = currentState;

            currentState = new CurrentState();
            var dbg = (DnDebugger)sender;

            switch (theDebugger.ProcessState)
            {
            case DebuggerProcessState.Starting:
                savedEvalState = null;
                break;

            case DebuggerProcessState.Continuing:
                if (dbg.IsEvaluating && savedEvalState == null)
                {
                    savedEvalState = oldState;
                }
                break;

            case DebuggerProcessState.Running:
                if (!dbg.IsEvaluating)
                {
                    ClearStackFrameLines();
                }
                break;

            case DebuggerProcessState.Paused:
                if (dbg.IsEvaluating)
                {
                    break;
                }

                // Don't update the selected thread if we just evaluated something
                if (UpdateState(savedEvalState))
                {
                    currentState.Thread = dbg.Current.Thread;
                    SelectedFrameNumber = 0;
                }
                else
                {
                    currentState = savedEvalState;
                }
                savedEvalState = null;

                foreach (var tab in fileTabManager.VisibleFirstTabs)
                {
                    UpdateStackFrameLines(tab.UIContext as ITextEditorUIContext, false);
                }
                break;

            case DebuggerProcessState.Terminated:
                savedEvalState = null;
                ClearStackFrameLines();
                break;

            default:
                throw new InvalidOperationException();
            }

            if (StackFramesUpdated != null)
            {
                StackFramesUpdated(this, new StackFramesUpdatedEventArgs(dbg));
            }
        }
 internal void DispatchEvaluationCompleted(DebuggerEventArgs e)
 {
     if (EvaluationCompleted != null)
         EvaluationCompleted(this, e);
     _manualEvaluationCompleted.Set();
 }
        void DebugManager_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            if (DebugManager.Instance.Debugger == null)
            {
                return;
            }
            if (DebugManager.Instance.Debugger.IsEvaluating)
            {
                return;
            }
            bool newIsRunning = DebugManager.Instance.ProcessState == DebuggerProcessState.Running;

            if (newIsRunning == isRunning)
            {
                return;
            }
            var dnProcess = DebugManager.Instance.Debugger.Processes.FirstOrDefault();

            if (dnProcess == null)
            {
                return;
            }

            isRunning = newIsRunning;
            int id = Interlocked.Increment(ref isRunningId);

            if (!isRunning)
            {
                return;
            }

            var process = GetProcessById(dnProcess.ProcessId);

            if (process == null)
            {
                return;
            }

            Timer timer = null;

            timer = new Timer(a => {
                timer.Dispose();
                if (id == isRunningId)
                {
                    var cur = App.Current;
                    if (cur == null)
                    {
                        return;
                    }
                    cur.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() => {
                        if (id == isRunningId)
                        {
                            if (ProcessRunning != null)
                            {
                                ProcessRunning(this, new DebuggedProcessRunningEventArgs(process));
                            }
                        }
                    }));
                }
            }, null, WAIT_TIME_MS, Timeout.Infinite);
        }
 internal void DispatchEvent(DebuggerEventArgs e)
 {
     e.Continue = true;
 }
Esempio n. 13
0
 /// <summary>
 /// Handle the given trigger.
 /// </summary>
 /// <param name="triggerType">The type of trigger to evaluate.</param>
 /// <param name="eventArgs">The event arguments to handle.</param>
 /// <returns>True if the event should be handled.</returns>
 public bool HandlesEvent(DebugTrigger triggerType, DebuggerEventArgs eventArgs)
 {
     return(_trigger == triggerType);
 }
 private void FinalizeEvent(DebuggerEventArgs e)
 {
     if (e.Continue)
         e.Controller.Continue();
 }
 protected virtual void OnExited(DebuggerEventArgs e)
 {
     if (Exited != null)
         Exited(this, e);
 }
Esempio n. 16
0
        void DnDebugger_OnProcessStateChanged(object sender, DebuggerEventArgs e)
        {
            Debug.Assert(sender != null && sender == dnDebugger);

            if (dnDebugger.ProcessState == DebuggerProcessState.Terminated)
            {
                if (hProcess_debuggee == null || hProcess_debuggee.IsClosed || hProcess_debuggee.IsInvalid || !Native.NativeMethods.GetExitCodeProcess(hProcess_debuggee.DangerousGetHandle(), out int exitCode))
                {
                    exitCode = -1;
                }
                clrDac = NullClrDac.Instance;
                ClrDacTerminated?.Invoke(this, EventArgs.Empty);
                UnhookDnDebuggerEventsAndCloseProcessHandle();

                SendMessage(new DbgMessageDisconnected(exitCode, GetMessageFlags()));
                return;
            }
            else if (dnDebugger.ProcessState == DebuggerProcessState.Paused)
            {
                ClrDacPaused?.Invoke(this, EventArgs.Empty);
                UpdateThreadProperties_CorDebug();

                foreach (var debuggerState in dnDebugger.DebuggerStates)
                {
                    foreach (var pauseState in debuggerState.PauseStates)
                    {
                        if (pauseState.Handled)
                        {
                            continue;
                        }
                        pauseState.Handled = true;
                        switch (pauseState.Reason)
                        {
                        case DebuggerPauseReason.Other:
                            // We use this reason when we pause the process, DbgManager already knows that we're paused
                            continue;

                        case DebuggerPauseReason.UserBreak:
                            // BreakCore() sends the Break message
                            continue;

                        case DebuggerPauseReason.ILCodeBreakpoint:
                            var ilbp = (ILCodeBreakpointPauseState)pauseState;
                            SendCodeBreakpointHitMessage_CorDebug(ilbp.Breakpoint, TryGetThread(ilbp.CorThread));
                            break;

                        case DebuggerPauseReason.Break:
                            var bs = (BreakPauseState)pauseState;
                            SendMessage(new DbgMessageProgramBreak(TryGetThread(bs.CorThread), GetMessageFlags()));
                            break;

                        case DebuggerPauseReason.NativeCodeBreakpoint:
                            var nbp = (NativeCodeBreakpointPauseState)pauseState;
                            SendCodeBreakpointHitMessage_CorDebug(nbp.Breakpoint, TryGetThread(nbp.CorThread));
                            break;

                        case DebuggerPauseReason.EntryPointBreakpoint:
                            var epbp = (EntryPointBreakpointPauseState)pauseState;
                            SendMessage(new DbgMessageEntryPointBreak(TryGetThread(epbp.CorThread), GetMessageFlags()));
                            break;

                        case DebuggerPauseReason.Eval:
                            // Don't send a message, that will confuse DbgManager. It thinks we're running or paused.
                            break;

                        case DebuggerPauseReason.DebugEventBreakpoint:
                        case DebuggerPauseReason.AnyDebugEventBreakpoint:
                            //TODO:
                            SendMessage(new DbgMessageBreak(TryGetThread(debuggerState.Thread), GetMessageFlags()));
                            break;

                        default:
                            Debug.Fail($"Unknown reason: {pauseState.Reason}");
                            SendMessage(new DbgMessageBreak(TryGetThread(debuggerState.Thread), GetMessageFlags()));
                            break;
                        }
                    }
                }
            }
        }
Esempio n. 17
0
 /// <summary>
 /// Handle a trigger event.
 /// </summary>
 /// <param name="triggerType">The type of trigger to handle.</param>
 /// <param name="eventArgs">The trigger event arguments.</param>
 /// <returns>True if the trigger should be handled.</returns>
 public bool HandlesEvent(DebugTrigger triggerType, DebuggerEventArgs eventArgs)
 {
     return(triggerType == DebugTrigger.Exception && !((ExceptionEventArgs)eventArgs).FirstChance);
 }