Beispiel #1
0
        void Step_DbgThread(DbgStepperImpl stepper, object stepperTag, DbgEngineStepKind step, bool singleProcess)
        {
            Dispatcher.VerifyAccess();

            var        infos             = new List <EngineInfo>();
            EngineInfo stepperEngineInfo = null;

            lock (lockObj) {
                var process = stepper.Process;
                var runtime = stepper.Runtime;
                foreach (var info in engines)
                {
                    if (info.Runtime == runtime)
                    {
                        stepperEngineInfo = info;
                    }
                    if (info.Process == process || !singleProcess)
                    {
                        infos.Add(info);
                    }
                }
            }

            if (stepperEngineInfo?.Process?.State != DbgProcessState.Paused)
            {
                RaiseStepperError_DbgThread(stepper, dnSpy_Debugger_Resources.ProcessIsNotPaused);
                return;
            }

            Debug.Assert(infos.Contains(stepperEngineInfo));
            RunEngines_DbgThread(infos.ToArray(), info => {
                if (info == stepperEngineInfo)
                {
                    stepper.EngineStepper.Step(stepperTag, step);
                }
                else
                {
                    info.Engine.Run();
                }
            });
        }
Beispiel #2
0
 void RaiseStepperError_DbgThread(DbgStepperImpl stepper, string error)
 {
     Dispatcher.VerifyAccess();
     stepper.RaiseError_DbgThread(string.Format(dnSpy_Debugger_Resources.DebugStepProcessError, error));
 }
Beispiel #3
0
 internal void Step(DbgStepperImpl stepper, object stepperTag, DbgEngineStepKind step, bool singleProcess) =>
 DbgThread(() => Step_DbgThread(stepper, stepperTag, step, singleProcess));