Esempio n. 1
0
        void Initialize(DbgEvaluationInfo evalInfo)
        {
            if (hasInitialized)
            {
                return;
            }
            errorMessage = InitializeCore(evalInfo);
            if (realProvider != null)
            {
                return;
            }
            Debug.Assert(errorMessage != null || membersCollection.Members != null);
            if (errorMessage == null && membersCollection.Members == null)
            {
                errorMessage = PredefinedEvaluationErrorMessages.InternalDebuggerError;
            }
            dbgManager = evalInfo.Runtime.Process.DbgManager;
            if (errorMessage != null)
            {
                childNodeProviderInfos = new ChildNodeProviderInfo[] { new ChildNodeProviderInfo(0, 1, 0) }
            }
            ;
            else if ((evalOptions & DbgValueNodeEvaluationOptions.NoHideRoots) != 0 || !membersCollection.HasHideRoot || (evalOptions & DbgValueNodeEvaluationOptions.RawView) != 0 || membersCollection.Members.Length == 0)
            {
                childNodeProviderInfos = new ChildNodeProviderInfo[] { new ChildNodeProviderInfo(0, (uint)membersCollection.Members.Length, 0) }
            }
            ;
            else
            {
                DbgDotNetValueNode valueNode = null;
                var list = Cache.AllocProviderList();
                try {
                    var   members          = membersCollection.Members;
                    int   membersBaseIndex = 0;
                    ulong baseIndex        = 0;
                    int   i;
                    for (i = 0; i < members.Length; i++)
                    {
                        if (!members[i].HasDebuggerBrowsableState_RootHidden)
                        {
                            continue;
                        }
                        if (membersBaseIndex != i)
                        {
                            list.Add(new ChildNodeProviderInfo(baseIndex, baseIndex + (uint)(i - membersBaseIndex), (uint)membersBaseIndex));
                            baseIndex       += (uint)(i - membersBaseIndex);
                            membersBaseIndex = i;
                        }

                        evalInfo.CancellationToken.ThrowIfCancellationRequested();
                        // Format specifiers get updated in GetChildren()
                        var info = CreateValueNode(evalInfo, membersBaseIndex, evalOptions, formatSpecifiers: null);
                        valueNode = info.node;
                        ulong childCount = info.canHide ? valueNode.GetChildCount(evalInfo) : 1;
                        list.Add(new ChildNodeProviderInfo(baseIndex, baseIndex + childCount, valueNode, info.canHide));

                        membersBaseIndex++;
                        baseIndex += childCount;
                        valueNode  = null;
                    }
                    if (membersBaseIndex != i)
                    {
                        list.Add(new ChildNodeProviderInfo(baseIndex, baseIndex + (uint)(i - membersBaseIndex), (uint)membersBaseIndex));
                    }
                    if (list.Count == 0)
                    {
                        list.Add(new ChildNodeProviderInfo(0, 0, 0));
                    }
                    childNodeProviderInfos = Cache.FreeAndToArray(ref list);
                }
                catch {
                    if (valueNode != null)
                    {
                        dbgManager.Close(valueNode);
                    }
                    dbgManager.Close(list.Select(a => a.ValueNode));
                    throw;
                }
            }
            hasInitialized = true;
        }
Esempio n. 2
0
 ulong GetChildCountCore(DbgEvaluationInfo evalInfo) =>
 dnValueNode.GetChildCount(evalInfo);
Esempio n. 3
0
 ulong GetChildCountCore(DbgEvaluationContext context, DbgStackFrame frame, CancellationToken cancellationToken) =>
 dnValueNode.GetChildCount(context, frame, cancellationToken);