コード例 #1
0
        public void Refresh(ThreadStackFrame threadStackframe)
        {
            String text = GetText(threadStackframe);

            r_frameNode.Text = text;
            GetInfo(threadStackframe);
        }
コード例 #2
0
        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]);
            }
        }
コード例 #3
0
 public void Refresh(ThreadStackFrame threadStackframe)
 {
     String text = GetText(threadStackframe);
     r_frameNode.Text = text;
     r_frameNode.ForeColor = threadStackframe.Managed? Color.Black:Color.Gray;
     GetInfo(threadStackframe);
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        public void Refresh(ThreadStackFrame threadStackframe)
        {
            String text = GetText(threadStackframe);

            r_frameNode.Text      = text;
            r_frameNode.ForeColor = threadStackframe.Managed? Color.Black:Color.Gray;
            GetInfo(threadStackframe);
        }
コード例 #6
0
 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;
 }
コード例 #7
0
        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;
        }
コード例 #8
0
        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());
        }
コード例 #9
0
        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());
        }
コード例 #10
0
        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;
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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();
        }
コード例 #13
0
 public void Refresh(ThreadStackFrame threadStackframe)
 {
     String text = GetText(threadStackframe);
     r_frameNode.Text = text;
     GetInfo(threadStackframe);
 }
コード例 #14
0
        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);
        }
コード例 #15
0
 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();
 }