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); }
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; } }
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; } }
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(); }
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; } }
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; } }
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)); } }
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; }
/// <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); }
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; } } } } }
/// <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); }