private void DebuggerService_StateChanged(object sender, DebuggerStateChangedEventArgs e) { if (e.OldState == DebuggerState.AwaitingInput) { inputLine.State = DisassemblyLineState.None; inputLine = null; } if (e.NewState == DebuggerState.Unavailable) { return; } if (e.NewState == DebuggerState.Running) { var line = GetLineByAddress(debuggerService.Machine.PC); line.HasIP = false; } else if (e.NewState == DebuggerState.StoppedAtError) { var line = GetLineByAddress(debuggerService.Machine.ExecutingAddress); line.State = DisassemblyLineState.Blocked; line.ToolTip = new ExceptionToolTip(debuggerService.CurrentException); BringLineIntoView(line); } else if (e.NewState == DebuggerState.Done) { var line = GetLineByAddress(debuggerService.Machine.ExecutingAddress); line.State = DisassemblyLineState.Stopped; BringLineIntoView(line); } else if (e.NewState == DebuggerState.AwaitingInput) { inputLine = GetLineByAddress(debuggerService.Machine.ExecutingAddress); inputLine.State = DisassemblyLineState.Paused; BringLineIntoView(inputLine); } else if (e.NewState == DebuggerState.Stopped && (e.OldState == DebuggerState.Running || e.OldState == DebuggerState.AwaitingInput)) { var line = GetLineByAddress(debuggerService.Machine.PC); line.HasIP = true; BringLineIntoView(line); } UpdateStackLines(); }
private void BringLineIntoView(DisassemblyLineViewModel line) { var lines = this.View.FindName <ItemsControl>("lines"); lines.BringIntoView(line); }