diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml index 3a0e1218ec..1ef9f493af 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml @@ -43,17 +43,19 @@ - + - + - + + + + + @@ -70,24 +72,26 @@ - + - + + - + - + + diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml.cs index ca3321bc32..f28cb1f5bc 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml.cs @@ -4,7 +4,11 @@ // // $Revision$ // +using System; +using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; using System.Text; using System.Windows; using System.Windows.Controls; @@ -13,11 +17,10 @@ using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; -using Debugger.AddIn.Visualizers.Graph.Layout; -using System; -using System.Collections.Generic; -using System.Linq; + using Debugger.AddIn.Visualizers.Common; +using Debugger.AddIn.Visualizers.Graph.Layout; +using System.Windows.Threading; namespace Debugger.AddIn.Visualizers.Graph.Drawing { @@ -61,6 +64,53 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing this.view = getInitialView(this.root); // data virtualization, PropertyNodeViewModel implements IEvaluate this.listView.ItemsSource = new VirtualizingObservableCollection(this.view); + + int maxLen = this.view.Max(contentNode => { return contentNode.Name.Length; } ); + int spaces = Math.Max((int)(maxLen * 1.5), 0); + string sp = ""; + for (int i = 0; i < spaces; i++) + sp += " "; + + GridView gv = listView.View as GridView; + gv.Columns[1].Header = "Name" + sp; + + + //AutoSizeColumns(); + + /*DispatcherTimer t = new DispatcherTimer(); + t.Interval = TimeSpan.FromMilliseconds(1000); + t.Start(); + t.Tick += (s, ee) => { AutoSizeColumns(); t.Stop(); };*/ + } + } + + public void AutoSizeColumns() + { + //listView.UpdateLayout(); + //listView.Measure(new Size(800, 800)); + //double sum = 0; + GridView gv = listView.View as GridView; + if (gv != null) + { + foreach (var c in gv.Columns) + { + //var header = c.Header as GridViewColumnHeader; + // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector) + // i.e. it is the same code that is executed when the gripper is double clicked + //var uw = c.GetType().GetMethod("UpdateActualWidth", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic); + //uw.Invoke(c, new object[] { }); + //if (double.IsNaN(c.Width)) + { + c.Width = c.ActualWidth; + } + c.Width = double.NaN; + + /*var dw = c.GetType().GetProperty("DesiredWidth", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic); + double desired = (double)dw.GetValue(c, null); + c.Width = c.ActualWidth; // ActualWidth is not correct until GridViewRowPresenter gets measured + c.Width = double.NaN; + sum += c.Width;*/ + } } } @@ -85,6 +135,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing PositionedNodeProperty property = clickedNode.Property; //property.IsPropertyExpanded = !property.IsPropertyExpanded; // done by databinding clickedButton.Content = property.IsPropertyExpanded ? "-" : "+"; + if (property.IsPropertyExpanded) { OnPropertyExpanded(property); @@ -112,6 +163,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing this.view.Insert(clickedIndex + i, childNode); i++; } + // insertChildren(clickedNode, this.view, clickedIndex); // TODO OnContentNodeExpanded(clickedNode); } else @@ -124,19 +176,21 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing } OnContentNodeCollapsed(clickedNode); } + + //AutoSizeColumns(); // set to Auto again to resize columns - var colName = (this.listView.View as GridView).Columns[0]; + /*var colName = (this.listView.View as GridView).Columns[0]; var colValue = (this.listView.View as GridView).Columns[1]; colName.Width = 300; colName.Width = double.NaN; colValue.Width = 300; colValue.Width = double.NaN; - //this.view.Insert(0, new NestedNodeViewModel()); + //this.view.Insert(0, new ContentNode()); //this.view.RemoveAt(0); this.listView.UpdateLayout(); this.listView.Width = colName.ActualWidth + colValue.ActualWidth + 30; - this.listView.Width = double.NaN; + this.listView.Width = double.NaN;*/ } private ObservableCollection getInitialView(ContentNode root) diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentNode.cs index e3ab26b716..b7754d543d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentNode.cs @@ -88,22 +88,12 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout /// /// Show a button to expand property associated with this node? /// - public bool ShowExpandPropertyButton + public virtual bool ShowExpandPropertyButton { get { - var thisAsPropertyNode = this as ContentPropertyNode; - if (thisAsPropertyNode == null) - { - // this is NestedNodeViewModel -> no property, don't show expand button - return false; - } - else - { - // this is PositionedNodeViewModel -> show expand button when appropriate - PositionedNodeProperty property = thisAsPropertyNode.Property; - return (!property.IsAtomic && !property.IsNull); - } + // this is NestedNodeViewModel -> no property, don't show expand button + return false; } } @@ -150,7 +140,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout public virtual void InitFrom(AbstractNode source, Expanded expanded) { - this.Name = getNestedNodeName(source); + this.Name = getContentNodeName(source); this.Text = ""; // lazy evaluated later this.IsNested = true; this.path = this.Parent == null ? this.Name : this.Parent.Path + "." + this.Name; @@ -173,7 +163,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout } } - private string getNestedNodeName(AbstractNode source) + private string getContentNodeName(AbstractNode source) { if (source is ThisNode) { diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentPropertyNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentPropertyNode.cs index 6f58388b13..2b44230f0d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentPropertyNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/ContentPropertyNode.cs @@ -15,7 +15,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout { PositionedNodeProperty positionedProperty; - public ContentPropertyNode(PositionedGraphNode containingNode, ContentNode parent) + public ContentPropertyNode(PositionedGraphNode containingNode, ContentNode parent) : base(containingNode, parent) { } @@ -45,6 +45,15 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout this.Text = this.positionedProperty.Value; } + public override bool ShowExpandPropertyButton + { + get + { + // show expand button when appropriate + return (!this.positionedProperty.IsAtomic && !this.positionedProperty.IsNull); + } + } + public override void InitFrom(AbstractNode source, Expanded expanded) { if (!(source is PropertyNode)) @@ -57,7 +66,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout this.IsNested = false; this.IsExpanded = false; // always false, property content nodes are never expanded this.positionedProperty = new PositionedNodeProperty( - sourcePropertyNode.Property, this.ContainingNode, + sourcePropertyNode.Property, this.ContainingNode, expanded.Expressions.IsExpanded(sourcePropertyNode.Property.Expression)); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedGraphNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedGraphNode.cs index 5319687a5a..89b34c0306 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedGraphNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedGraphNode.cs @@ -73,7 +73,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout private void initVisualControl() { this.nodeVisualControl = new PositionedGraphNodeControl(); - this.nodeVisualControl.MaxHeight = 200; + this.nodeVisualControl.MaxHeight = 300; // propagate events from nodeVisualControl this.nodeVisualControl.PropertyExpanded += new EventHandler(NodeVisualControl_PropertyExpanded); @@ -104,7 +104,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout public void Measure() { - this.nodeVisualControl.Measure(new Size(500, 500)); + this.nodeVisualControl.Measure(new Size(800, 800)); } public double Left { get; set; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoEdgeRouter.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoEdgeRouter.cs index dc4e8a5bac..ccdf153d38 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoEdgeRouter.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoEdgeRouter.cs @@ -30,7 +30,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout /// with preserved node positions and calculated edge positions. public PositionedGraph CalculateEdges(PositionedGraph graphWithNodesPositioned) { - DotFormatter dotFormatter = new BoxDotFormatter(graphWithNodesPositioned); + DotFormatter dotFormatter = new RecordDotFormatter(graphWithNodesPositioned); // start Neato.exe NeatoProcess neatoProcess = NeatoProcess.Start(); diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraph.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraph.cs index bfb8d21037..cc90ae330e 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraph.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraph.cs @@ -55,7 +55,7 @@ namespace Debugger.AddIn.Visualizers.Graph { seenNodes.Add(root); - foreach(var prop in root.ComplexProperties) + foreach(var prop in root.Properties) { if (prop.TargetNode != null && !seenNodes.Contains(prop.TargetNode)) determineReachableNodes(prop.TargetNode, seenNodes); diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs index 18274f295b..8e8dc7a0fb 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs @@ -112,7 +112,7 @@ namespace Debugger.AddIn.Visualizers.Graph public ObjectGraphNode ObtainNodeForExpression(Expression expr, out bool createdNewNode) { - return ObtainNodeForValue(expr.GetPermanentReference(), out createdNewNode); + return ObtainNodeForValue(expr.EvalPermanentReference(), out createdNewNode); } /// @@ -157,11 +157,12 @@ namespace Debugger.AddIn.Visualizers.Graph } // non-public members - if (type.HasMembers(nonPublicInstanceMemberFlags)) + var nonPublicProperties = getProperties(value, type, this.nonPublicInstanceMemberFlags); + if (nonPublicProperties.Count > 0) { var nonPublicMembersNode = new NonPublicMembersNode(); node.AddChild(nonPublicMembersNode); - foreach (var nonPublicProperty in getProperties(value, type, this.nonPublicInstanceMemberFlags)) + foreach (var nonPublicProperty in nonPublicProperties) { nonPublicMembersNode.AddChild(new PropertyNode(nonPublicProperty)); } @@ -183,7 +184,26 @@ namespace Debugger.AddIn.Visualizers.Graph { List propertyList = new List(); - // take all properties for this value (type = value's real type) + foreach (PropertyInfo memberProp in shownType.GetProperties(flags)) + { + if (memberProp.Name.Contains("<")) + continue; + + // TODO just temporary - ObjectGraphProperty needs an expression + // to use expanded / nonexpanded (and to evaluate?) + Expression propExpression = value.Expression.AppendMemberReference(memberProp); + // Value, IsAtomic are lazy evaluated + //var t = memberProp.DeclaringType; + propertyList.Add(new ObjectGraphProperty + { Name = memberProp.Name, + Expression = propExpression, Value = "", + /*PropInfo = memberProp,*/ IsAtomic = true, TargetNode = null }); + + } + + return propertyList.Sorted(ObjectPropertyComparer.Instance); + + /*// take all properties for this value (type = value's real type) foreach(Expression memberExpr in value.Expression.AppendObjectMembers(shownType, flags)) { // skip private backing fields @@ -201,13 +221,12 @@ namespace Debugger.AddIn.Visualizers.Graph } else { - ObjectGraphNode targetNode = null; bool memberIsNull = memberExpr.IsNull(); - propertyList.Add(createComplexProperty(memberName, memberExpr, targetNode, memberIsNull)); + propertyList.Add(createComplexProperty(memberName, memberExpr, null, memberIsNull)); } } - return propertyList.Sorted(ObjectPropertyComparer.Instance); + return propertyList.Sorted(ObjectPropertyComparer.Instance);*/ } /// @@ -217,23 +236,34 @@ namespace Debugger.AddIn.Visualizers.Graph /// private void loadNeighborsRecursive(ObjectGraphNode thisNode, ExpandedExpressions expandedNodes) { - foreach(ObjectGraphProperty complexProperty in thisNode.ComplexProperties) + //foreach(ObjectGraphProperty complexProperty in thisNode.ComplexProperties) + foreach(ObjectGraphProperty complexProperty in thisNode.Properties) { ObjectGraphNode targetNode = null; // we are only evaluating expanded nodes here // (we have to do this to know the "shape" of the graph) // property laziness makes sense, as we are not evaluating atomic and non-expanded properties out of user's view - if (!complexProperty.IsNull && expandedNodes.IsExpanded(complexProperty.Expression)) + if (/*!complexProperty.IsNull && we dont know yet if it's null */expandedNodes.IsExpanded(complexProperty.Expression)) { - Value memberValue = complexProperty.Expression.GetPermanentReference(); - - bool createdNew; - // get existing node (loop) or create new - targetNode = ObtainNodeForValue(memberValue, out createdNew); - if (createdNew) + // if expanded, evaluate this property + Value memberValue = complexProperty.Expression.Evaluate(this.debuggerService.DebuggedProcess); + if (memberValue.IsNull) + { + continue; + } + else { - // if member node is new, recursively build its subtree - loadNeighborsRecursive(targetNode, expandedNodes); + // if property value is not null, create neighbor + memberValue = memberValue.GetPermanentReference(); + + bool createdNew; + // get existing node (loop) or create new + targetNode = ObtainNodeForValue(memberValue, out createdNew); + if (createdNew) + { + // if member node is new, recursively build its subtree + loadNeighborsRecursive(targetNode, expandedNodes); + } } } else diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphNode.cs index 4424fa13ae..74c3b9b0cd 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphNode.cs @@ -39,16 +39,24 @@ namespace Debugger.AddIn.Visualizers.Graph get; set; } + public IEnumerable Properties + { + get + { + return this.Content.FlattenPropertyNodes().Select(node => {return node.Property; }); + } + } + // TODO just for ObjectGraphBuilder, remove /// /// Only complex properties filtered out of /// - public IEnumerable ComplexProperties + /*public IEnumerable ComplexProperties { get { return this.Content.FlattenPropertyNodes().Select(node => {return node.Property; }); } - } + }*/ } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphProperty.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphProperty.cs index 64feb229da..61bbba499c 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphProperty.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphProperty.cs @@ -8,21 +8,37 @@ using ICSharpCode.SharpDevelop.Services; using System; using System.Collections.Generic; using System.Text; +using Debugger.AddIn.Visualizers.Utils; namespace Debugger.AddIn.Visualizers.Graph { - /// - /// ObjectProperty used in ObjectGraph. Has TargetNode. - /// Support on-demand evaluation of Value property. - /// - public class ObjectGraphProperty : ObjectProperty, IEvaluate - { - /// - /// Node that this property points to. Can be null. Always null if is true. + /// + /// ObjectProperty used in ObjectGraph. Has TargetNode. + /// Support on-demand evaluation of Value property. + /// + public class ObjectGraphProperty : ObjectProperty, IEvaluate + { + /// + /// Node that this property points to. Can be null. Always null if is true. + /// + public ObjectGraphNode TargetNode { get; set; } + + //private Expressions.Expression containingObjectExpression; + + /*public ObjectGraphProperty(Expressions.Expression containingObjectExpression) + { + if (containingObjectExpression == null) + throw new ArgumentNullException("containingObjectExpression"); + this.containingObjectExpression = containingObjectExpression; + }*/ + + /// + /// MemberInfo used for obtaining value of this property /// - public ObjectGraphNode TargetNode { get; set; } + public Debugger.MetaData.MemberInfo PropInfo { get; set; } - bool evaluateCalled = false; + + bool evaluateCalled = false; public bool IsEvaluated { get { return this.evaluateCalled; } @@ -30,13 +46,23 @@ namespace Debugger.AddIn.Visualizers.Graph public void Evaluate() { + /*if (this.PropInfo == null) + { + throw new DebuggerVisualizerException("Cannot evaluate property with missing MemberInfo"); + } + Value debuggerVal = this.containingObjectExpression.Evaluate(WindowsDebugger.CurrentProcess).GetMemberValue(this.PropInfo);*/ + if (this.Expression == null) { throw new DebuggerVisualizerException("Cannot evaluate property with missing Expression"); } Value debuggerVal = this.Expression.Evaluate(WindowsDebugger.CurrentProcess); - this.Value = debuggerVal.IsNull ? string.Empty : debuggerVal.InvokeToString(); + + this.IsAtomic = debuggerVal.Type.IsAtomic(); + this.IsNull = debuggerVal.IsNull; + // null and complex properties evaluate to empty string + this.Value = debuggerVal.IsNull || (!this.IsAtomic) ? string.Empty : debuggerVal.InvokeToString(); this.evaluateCalled = true; } - } + } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/ObjectProperty.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/ObjectProperty.cs index 14e8117708..08dfe11f71 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/ObjectProperty.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/ObjectProperty.cs @@ -24,7 +24,7 @@ namespace Debugger.AddIn.Visualizers public string Value { get; set; } /// - /// Expression used for obtaining this property + /// Expression used for obtaining value of this property /// public Debugger.Expressions.Expression Expression { get; set; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/AtomicType.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/AtomicType.cs index 527c4b568e..95c286f213 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/AtomicType.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/AtomicType.cs @@ -16,6 +16,16 @@ namespace Debugger.AddIn.Visualizers.Utils /// public static class AtomicType { + /// + /// Checks whether given expression's type is atomic. + /// + /// Expression. + /// True if expression's type is atomic, False otherwise. + public static bool IsAtomic(this DebugType type) + { + return !(type.IsClass || type.IsValueType /* = struct in C# */); + } + /// /// Checks whether given expression's type is atomic. /// @@ -24,7 +34,7 @@ namespace Debugger.AddIn.Visualizers.Utils public static bool IsOfAtomicType(this Expression expr) { DebugType typeOfValue = expr.Evaluate(WindowsDebugger.CurrentProcess).Type; - return !(typeOfValue.IsClass || typeOfValue.IsValueType /* = struct in C# */); + return AtomicType.IsAtomic(typeOfValue); } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs index ebffc7abae..b2d755d1d4 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Utils/DebuggerHelpers.cs @@ -64,7 +64,7 @@ namespace Debugger.AddIn.Visualizers.Utils return int.Parse(defaultHashCode); } - public static Value GetPermanentReference(this Expression expr) + public static Value EvalPermanentReference(this Expression expr) { return expr.Evaluate(WindowsDebugger.CurrentProcess).GetPermanentReference(); }