internal static void Execute(CallStackFrameVM vm, bool newTab) { if (vm != null) { StackFrameManager.Instance.SelectedFrameNumber = vm.Index; FrameUtils.GoTo(vm.Frame, newTab); } }
void InitializeStackFrames() { if (!IsEnabled || theDebugger.ProcessState != DebuggerProcessState.Paused) { framesList.Clear(); return; } var process = theDebugger.Debugger?.Processes?.FirstOrDefault(); Debug.Assert(process != null); if (process == null) { framesList.Clear(); return; } bool tooManyFrames; var newFrames = stackFrameService.GetFrames(out tooManyFrames); bool oldHadTooManyFrames = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; int oldVisibleFramesCount = framesList.Count - (oldHadTooManyFrames ? 1 : 0); int framesToAdd = newFrames.Count - oldVisibleFramesCount; const int MAX_FRAMES_DIFF = 50; if (Math.Abs(framesToAdd) > MAX_FRAMES_DIFF) { oldHadTooManyFrames = false; oldVisibleFramesCount = 0; framesToAdd = newFrames.Count; framesList.Clear(); } if (framesToAdd > 0) { for (int i = 0; i < framesToAdd; i++) { var frame = newFrames[i]; var vm = new CallStackFrameVM(callStackFrameContext, i, frame, process); vm.IsCurrentFrame = i == stackFrameService.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); if (framesList.Count == i) { framesList.Add(vm); } else { framesList.Insert(i, vm); } } } else if (framesToAdd < 0) { int frames = framesToAdd; while (frames++ < 0) { framesList.RemoveAt(0); } } for (int i = framesToAdd >= 0 ? framesToAdd : 0; i < newFrames.Count; i++) { var vm = (CallStackFrameVM)framesList[i]; var frame = newFrames[i]; vm.Index = i; vm.IsCurrentFrame = i == stackFrameService.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); vm.SetFrame(frame, process); } if (oldHadTooManyFrames == tooManyFrames) { } else if (oldHadTooManyFrames && !tooManyFrames) { bool b = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; Debug.Assert(b); if (b) { framesList.RemoveAt(framesList.Count - 1); } } else if (!oldHadTooManyFrames && tooManyFrames) { framesList.Add(new MessageCallStackFrameVM(callStackFrameContext, newFrames.Count, dnSpy_Debugger_Resources.CallStack_MaxFramesExceeded)); } }
internal static void Execute(IModuleIdProvider moduleIdProvider, IStackFrameService stackFrameService, IDocumentTabService documentTabService, IModuleLoader moduleLoader, CallStackFrameVM vm, bool newTab) { if (vm != null) { stackFrameService.SelectedFrameNumber = vm.Index; FrameUtils.GoTo(moduleIdProvider, documentTabService, moduleLoader, vm.Frame, newTab); } }
internal static void Execute(IStackFrameManager stackFrameManager, IFileTabManager fileTabManager, IModuleLoader moduleLoader, CallStackFrameVM vm, bool newTab) { if (vm != null) { stackFrameManager.SelectedFrameNumber = vm.Index; FrameUtils.GoTo(fileTabManager, moduleLoader, vm.Frame, newTab); } }
internal void InitializeStackFrames() { if (!IsEnabled) { framesList.Clear(); return; } bool tooManyFrames; var newFrames = StackFrameManager.Instance.GetFrames(out tooManyFrames); bool oldHadTooManyFrames = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; int oldVisibleFramesCount = framesList.Count - (oldHadTooManyFrames ? 1 : 0); int framesToAdd = newFrames.Count - oldVisibleFramesCount; const int MAX_FRAMES_DIFF = 50; if (Math.Abs(framesToAdd) > MAX_FRAMES_DIFF) { oldHadTooManyFrames = false; oldVisibleFramesCount = 0; framesToAdd = newFrames.Count; framesList.Clear(); } if (framesToAdd > 0) { for (int i = 0; i < framesToAdd; i++) { var frame = newFrames[i]; var vm = new CallStackFrameVM(this, i, frame); vm.IsCurrentFrame = i == StackFrameManager.Instance.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); if (framesList.Count == i) { framesList.Add(vm); } else { framesList.Insert(i, vm); } } } else if (framesToAdd < 0) { int frames = framesToAdd; while (frames++ < 0) { framesList.RemoveAt(0); } } for (int i = framesToAdd >= 0 ? framesToAdd : 0; i < newFrames.Count; i++) { var vm = (CallStackFrameVM)framesList[i]; var frame = newFrames[i]; vm.Index = i; vm.IsCurrentFrame = i == StackFrameManager.Instance.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); vm.Frame = frame; } if (oldHadTooManyFrames == tooManyFrames) { } else if (oldHadTooManyFrames && !tooManyFrames) { bool b = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; Debug.Assert(b); if (b) { framesList.RemoveAt(framesList.Count - 1); } } else if (!oldHadTooManyFrames && tooManyFrames) { framesList.Add(new MessageCallStackFrameVM(this, newFrames.Count, "The maximum number of stack frames supported by dnSpy has been exceeded.")); } }
internal void InitializeStackFrames() { if (!IsEnabled) { framesList.Clear(); return; } bool tooManyFrames; var newFrames = StackFrameManager.Instance.GetFrames(out tooManyFrames); bool oldHadTooManyFrames = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; int oldVisibleFramesCount = framesList.Count - (oldHadTooManyFrames ? 1 : 0); int framesToAdd = newFrames.Count - oldVisibleFramesCount; const int MAX_FRAMES_DIFF = 50; if (Math.Abs(framesToAdd) > MAX_FRAMES_DIFF) { oldHadTooManyFrames = false; oldVisibleFramesCount = 0; framesToAdd = newFrames.Count; framesList.Clear(); } if (framesToAdd > 0) { for (int i = 0; i < framesToAdd; i++) { var frame = newFrames[i]; var vm = new CallStackFrameVM(this, i, frame); vm.IsCurrentFrame = i == StackFrameManager.Instance.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); if (framesList.Count == i) framesList.Add(vm); else framesList.Insert(i, vm); } } else if (framesToAdd < 0) { int frames = framesToAdd; while (frames++ < 0) framesList.RemoveAt(0); } for (int i = framesToAdd >= 0 ? framesToAdd : 0; i < newFrames.Count; i++) { var vm = (CallStackFrameVM)framesList[i]; var frame = newFrames[i]; vm.Index = i; vm.IsCurrentFrame = i == StackFrameManager.Instance.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); vm.Frame = frame; } if (oldHadTooManyFrames == tooManyFrames) { } else if (oldHadTooManyFrames && !tooManyFrames) { bool b = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; Debug.Assert(b); if (b) framesList.RemoveAt(framesList.Count - 1); } else if (!oldHadTooManyFrames && tooManyFrames) framesList.Add(new MessageCallStackFrameVM(this, newFrames.Count, "The maximum number of stack frames supported by dnSpy has been exceeded.")); }
void InitializeStackFrames() { if (!IsEnabled || theDebugger.ProcessState != DebuggerProcessState.Paused) { framesList.Clear(); return; } var process = theDebugger.Debugger?.Processes?.FirstOrDefault(); Debug.Assert(process != null); if (process == null) { framesList.Clear(); return; } bool tooManyFrames; var newFrames = stackFrameService.GetFrames(out tooManyFrames); bool oldHadTooManyFrames = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; int oldVisibleFramesCount = framesList.Count - (oldHadTooManyFrames ? 1 : 0); int framesToAdd = newFrames.Count - oldVisibleFramesCount; const int MAX_FRAMES_DIFF = 50; if (Math.Abs(framesToAdd) > MAX_FRAMES_DIFF) { oldHadTooManyFrames = false; oldVisibleFramesCount = 0; framesToAdd = newFrames.Count; framesList.Clear(); } if (framesToAdd > 0) { for (int i = 0; i < framesToAdd; i++) { var frame = newFrames[i]; var vm = new CallStackFrameVM(callStackFrameContext, i, frame, process); vm.IsCurrentFrame = i == stackFrameService.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); if (framesList.Count == i) framesList.Add(vm); else framesList.Insert(i, vm); } } else if (framesToAdd < 0) { int frames = framesToAdd; while (frames++ < 0) framesList.RemoveAt(0); } for (int i = framesToAdd >= 0 ? framesToAdd : 0; i < newFrames.Count; i++) { var vm = (CallStackFrameVM)framesList[i]; var frame = newFrames[i]; vm.Index = i; vm.IsCurrentFrame = i == stackFrameService.SelectedFrameNumber; vm.IsUserCode = IsUserCode(frame); vm.SetFrame(frame, process); } if (oldHadTooManyFrames == tooManyFrames) { } else if (oldHadTooManyFrames && !tooManyFrames) { bool b = framesList.Count > 0 && framesList[framesList.Count - 1] is MessageCallStackFrameVM; Debug.Assert(b); if (b) framesList.RemoveAt(framesList.Count - 1); } else if (!oldHadTooManyFrames && tooManyFrames) framesList.Add(new MessageCallStackFrameVM(callStackFrameContext, newFrames.Count, dnSpy_Debugger_Resources.CallStack_MaxFramesExceeded)); }