示例#1
0
        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();
        }
示例#2
0
        private void BringLineIntoView(DisassemblyLineViewModel line)
        {
            var lines = this.View.FindName <ItemsControl>("lines");

            lines.BringIntoView(line);
        }