public void Refresh(ThreadStackFrame threadStackframe) { String text = GetText(threadStackframe); r_frameNode.Text = text; GetInfo(threadStackframe); }
private void RefreshFrames(List <ThreadStackFrame> frames) { int indexDelta = r_waitedNodes.Count + r_ownedNodes.Count; int countOld = r_frameNodes.Count; int countNew = frames.Count; int to = countNew; if (countNew < countOld) { for (int i = countNew; i < countOld; ++i) { r_frameNodes[countNew].Remove(); r_frameNodes.RemoveAt(countNew); } } else if (countOld < countNew) { to = countOld; int index = countOld; for (int i = 0; i < (countNew - countOld); ++i) { ThreadStackFrame frame = frames[index]; ThreadStackFrameNode frameNode = new ThreadStackFrameNode(r_manager, r_threadStackNode, index + indexDelta, frame); r_frameNodes.Add(frameNode); ++index; } } for (int i = 0; i < to; ++i) { r_frameNodes[i].Refresh(frames[i]); } }
public void Refresh(ThreadStackFrame threadStackframe) { String text = GetText(threadStackframe); r_frameNode.Text = text; r_frameNode.ForeColor = threadStackframe.Managed? Color.Black:Color.Gray; GetInfo(threadStackframe); }
internal ThreadStackFrameNode(ThreadStackNodeManager manager, TreeNode threadStackNode, int index, ThreadStackFrame threadStackframe) { if (threadStackNode == null) throw new ArgumentNullException("threadStackNode"); if (manager == null) throw new ArgumentNullException("manager"); if (threadStackframe == null) throw new ArgumentNullException("threadStackframe"); r_manager = manager; r_threadStackNode = threadStackNode; String text = GetText(threadStackframe); r_frameNode = r_threadStackNode.Nodes.Insert(index, text); r_frameNode.ImageKey = "text_list_bullets.png"; r_frameNode.SelectedImageKey = r_frameNode.ImageKey; r_frameNode.Tag = this; if (!threadStackframe.Managed) { r_frameNode.ForeColor = Color.Gray; } GetInfo(threadStackframe); }
private void GetInfo(ThreadStackFrame frame) { String fn = frame.FileName; if (frame.Line > 0 && fn != null && fn.Length > 0) { _line = (int)frame.Line; _fileName = frame.FileName; } else { _line = 0; _fileName = null; } _eip = (int)frame.InstructionOffset; _managedMethod = frame.FunctionName; _offset = (int)frame.FrameOffset; }
private String GetText(ThreadStackFrame frame) { StringBuilder name = new StringBuilder(); name.Append(frame.FunctionName); Int32 line = frame.Line; if (r_manager.LineNumbers && line > 0) { name.Append("- line "); name.Append(frame.Line); } else if (r_manager.Offsets) { name.Append(" "); name.Append(r_manager.GetValue(frame.InstructionOffset)); name.Append(" EIP"); } return(name.ToString()); }
private String GetText(ThreadStackFrame frame) { StringBuilder name = new StringBuilder(); if (frame.FrameName.Length > 0) { name.Append("[" + frame.FrameName + "] "); } String moduleName = frame.ModuleName; if (r_manager.ModuleNames && moduleName.Length > 0) { name.Append(moduleName); name.Append("!"); } name.Append(frame.MethodName); UInt32 line = frame.Line; if (r_manager.LineNumbers && line > 0) { name.Append("- line "); name.Append(frame.Line); } else if (r_manager.Offsets) { if (frame.Managed) { name.Append(" + "); name.Append(r_manager.GetValue(frame.Offset)); name.Append(" bytes"); } else { name.Append(" "); name.Append(r_manager.GetValue(frame.Eip)); name.Append(" EIP"); } } return(name.ToString()); }
private bool WalkStackCallback(ThreadStackFrame stackFrame) { ulong address = stackFrame.PcAddress.ToUInt64(); // HACK for XP where the top user-mode frame for system threads is always 0xffffffff if (_pid == 4) { if (OSVersion.WindowsVersion == WindowsVersion.XP && address == 0xffffffff) return true; } try { ListViewItem newItem = listViewCallStack.Items.Add(new ListViewItem( new string[] { Utils.FormatAddress(address), _symbols.GetSymbolFromAddress(address) })); newItem.Tag = address; try { if (stackFrame.Params.Length > 0) newItem.ToolTipText = "Parameters: "; foreach (IntPtr arg in stackFrame.Params) newItem.ToolTipText += Utils.FormatAddress(arg) + ", "; if (newItem.ToolTipText.EndsWith(", ")) newItem.ToolTipText = newItem.ToolTipText.Remove(newItem.ToolTipText.Length - 2); try { string fileAndLine = _symbols.GetLineFromAddress(address); if (fileAndLine != null) newItem.ToolTipText += "\nFile: " + fileAndLine; } catch { } } catch (Exception ex2) { Logging.Log(ex2); } } catch (Exception ex) { Logging.Log(ex); ListViewItem newItem = listViewCallStack.Items.Add(new ListViewItem(new string[] { Utils.FormatAddress(address), "???" })); newItem.Tag = address; } return true; }
private bool WalkStackCallback(ThreadStackFrame stackFrame) { ulong address = stackFrame.PcAddress.ToUInt64(); // HACK for XP where the top user-mode frame for system threads is always 0xffffffff if (_pid == 4) { if (OSVersion.WindowsVersion == WindowsVersion.XP && address == 0xffffffff) { return(true); } } try { ListViewItem newItem = listViewCallStack.Items.Add(new ListViewItem(new[] { Utils.FormatAddress(address), _symbols.GetSymbolFromAddress(address) })); newItem.Tag = address; try { if (stackFrame.Params.Length > 0) { newItem.ToolTipText = "Parameters: "; } foreach (IntPtr arg in stackFrame.Params) { newItem.ToolTipText += Utils.FormatAddress(arg) + ", "; } if (newItem.ToolTipText.EndsWith(", ")) { newItem.ToolTipText = newItem.ToolTipText.Remove(newItem.ToolTipText.Length - 2); } try { string fileAndLine = _symbols.GetLineFromAddress(address); if (fileAndLine != null) { newItem.ToolTipText += "\nFile: " + fileAndLine; } } catch { } } catch (Exception ex2) { Logging.Log(ex2); } } catch (Exception ex) { Logging.Log(ex); ListViewItem newItem = listViewCallStack.Items.Add(new ListViewItem(new string[] { Utils.FormatAddress(address), "???" })); newItem.Tag = address; } return(true); }
private String GetText(ThreadStackFrame frame) { StringBuilder name = new StringBuilder(); name.Append(frame.FunctionName); Int32 line = frame.Line; if (r_manager.LineNumbers && line > 0) { name.Append("- line "); name.Append(frame.Line); } else if (r_manager.Offsets) { name.Append(" "); name.Append(r_manager.GetValue(frame.InstructionOffset)); name.Append(" EIP"); } return name.ToString(); }
internal ThreadStackFrameNode(ThreadStackNodeManager manager, TreeNode threadStackNode, int index, ThreadStackFrame threadStackframe) { if (threadStackNode == null) { throw new ArgumentNullException("threadStackNode"); } if (manager == null) { throw new ArgumentNullException("manager"); } if (threadStackframe == null) { throw new ArgumentNullException("threadStackframe"); } r_manager = manager; r_threadStackNode = threadStackNode; String text = GetText(threadStackframe); r_frameNode = r_threadStackNode.Nodes.Insert(index, text); r_frameNode.ImageKey = "text_list_bullets.png"; r_frameNode.SelectedImageKey = r_frameNode.ImageKey; r_frameNode.Tag = this; GetInfo(threadStackframe); }
private String GetText(ThreadStackFrame frame) { StringBuilder name = new StringBuilder(); if (frame.FrameName.Length > 0) { name.Append("[" + frame.FrameName + "] "); } String moduleName = frame.ModuleName; if (r_manager.ModuleNames && moduleName.Length > 0) { name.Append(moduleName); name.Append("!"); } name.Append(frame.MethodName); UInt32 line = frame.Line; if (r_manager.LineNumbers && line > 0) { name.Append("- line "); name.Append(frame.Line); } else if (r_manager.Offsets) { if (frame.Managed) { name.Append(" + "); name.Append(r_manager.GetValue(frame.Offset)); name.Append(" bytes"); } else { name.Append(" "); name.Append(r_manager.GetValue(frame.Eip)); name.Append(" EIP"); } } return name.ToString(); }