void GoToStatement(CallStackItem item) { if (null == item) { return; } StackFrameStatementManager.SelectedFrame = item.FrameNumber; var debugModule = item.Frame.MethodInfo.DebugModule; var module = MainWindow.Instance.LoadAssembly(debugModule.AssemblyFullPath, debugModule.FullPath).ModuleDefinition as ModuleDefMD; if (module == null) { return; } IMemberRef mr = module.ResolveToken(item.Token) as IMemberRef; if (mr == null) { return; } if (Keyboard.Modifiers == ModifierKeys.Control || Keyboard.Modifiers == ModifierKeys.Shift) { MainWindow.Instance.OpenNewEmptyTab(); } var textView = MainWindow.Instance.SafeActiveTextView; if (DebugUtils.JumpTo(textView, mr, item.MethodKey, item.ILOffset)) { MainWindow.Instance.SetTextEditorFocus(textView); } }
IList <CallStackItem> CreateItems(Process debuggedProcess) { List <CallStackItem> items = new List <CallStackItem>(); int frameNumber = 0; foreach (StackFrame frame in debuggedProcess.SelectedThread.GetCallstack(100)) { CallStackItem item; item = new CallStackItem() { FrameNumber = frameNumber, Name = GetFullName(frame), ModuleName = frame.MethodInfo.DebugModule.ToString(), Token = (uint)frame.MethodInfo.MetadataToken, ILOffset = frame.IP.IsValid ? frame.IP.Offset : -1, ILOffsetString = frame.IP.IsValid ? string.Format("0x{0:X4}", frame.IP.Offset) : "????", MethodKey = frame.MethodInfo.ToMethodKey(), }; if (frameNumber == 0) { item.Image = ImageService.GetImage("CurrentLine", BackgroundType.GridViewItem); } else if (frameNumber == StackFrameStatementManager.SelectedFrame) { item.Image = ImageService.GetImage("SelectedReturnLine", BackgroundType.GridViewItem); } frameNumber++; var module = frame.MethodInfo.DebugModule; if (module.IsDynamic || module.IsInMemory) { //TODO: support this } else { var loadedMod = MainWindow.Instance.LoadAssembly(module.AssemblyFullPath, module.FullPath).ModuleDefinition as ModuleDef; if (loadedMod != null) { item.ModuleName = loadedMod.FullName; var asm = loadedMod.Assembly; if (asm != null) // Should never fail { item.AssemblyName = asm.FullName; } } } item.Frame = frame; items.Add(item); } return(items); }
IList <CallStackItem> CreateItems(Process debuggedProcess) { List <CallStackItem> items = new List <CallStackItem>(); foreach (StackFrame frame in debuggedProcess.SelectedThread.GetCallstack(100)) { CallStackItem item; // show modules names string moduleName = frame.MethodInfo.DebugModule.ToString(); item = new CallStackItem() { Name = GetFullName(frame), ModuleName = moduleName }; item.Frame = frame; items.Add(item); Utils.DoEvents(debuggedProcess); } return(items); }
void GoToStatement(CallStackItem item) { if (null == item) return; StackFrameStatementManager.SelectedFrame = item.FrameNumber; var debugModule = item.Frame.MethodInfo.DebugModule; var module = MainWindow.Instance.LoadAssembly(debugModule.AssemblyFullPath, debugModule.FullPath).ModuleDefinition as ModuleDefMD; if (module == null) return; IMemberRef mr = module.ResolveToken(item.Token) as IMemberRef; if (mr == null) return; if (Keyboard.Modifiers == ModifierKeys.Control || Keyboard.Modifiers == ModifierKeys.Shift) MainWindow.Instance.OpenNewEmptyTab(); var textView = MainWindow.Instance.SafeActiveTextView; if (DebugUtils.JumpTo(textView, mr, item.MethodKey, item.ILOffset)) MainWindow.Instance.SetTextEditorFocus(textView); }
IList<CallStackItem> CreateItems(Process debuggedProcess) { List<CallStackItem> items = new List<CallStackItem>(); int frameNumber = 0; foreach (StackFrame frame in debuggedProcess.SelectedThread.GetCallstack(100)) { CallStackItem item; item = new CallStackItem() { FrameNumber = frameNumber, Name = GetFullName(frame), ModuleName = frame.MethodInfo.DebugModule.ToString(), Token = (uint)frame.MethodInfo.MetadataToken, ILOffset = frame.IP.IsValid ? frame.IP.Offset : -1, ILOffsetString = frame.IP.IsValid ? string.Format("0x{0:X4}", frame.IP.Offset) : "????", MethodKey = frame.MethodInfo.ToMethodKey(), }; if (frameNumber == 0) item.Image = ImageService.GetImage("CurrentLine", BackgroundType.GridViewItem); else if (frameNumber == StackFrameStatementManager.SelectedFrame) item.Image = ImageService.GetImage("SelectedReturnLine", BackgroundType.GridViewItem); frameNumber++; var module = frame.MethodInfo.DebugModule; if (module.IsDynamic || module.IsInMemory) { //TODO: support this } else { var loadedMod = MainWindow.Instance.LoadAssembly(module.AssemblyFullPath, module.FullPath).ModuleDefinition as ModuleDef; if (loadedMod != null) { item.ModuleName = loadedMod.FullName; var asm = loadedMod.Assembly; if (asm != null) // Should never fail item.AssemblyName = asm.FullName; } } item.Frame = frame; items.Add(item); } return items; }
IList<CallStackItem> CreateItems(Process debuggedProcess) { List<CallStackItem> items = new List<CallStackItem>(); foreach (StackFrame frame in debuggedProcess.SelectedThread.GetCallstack(100)) { CallStackItem item; // show modules names string moduleName = frame.MethodInfo.DebugModule.ToString(); item = new CallStackItem() { Name = GetFullName(frame), ModuleName = moduleName }; item.Frame = frame; items.Add(item); Utils.DoEvents(debuggedProcess); } return items; }