Пример #1
0
        public override int GetRowValue(long row)
        {
            var obj = m_Table.GetObjectData(row).displayObject;

            switch (obj.dataType)
            {
            case ObjectDataType.ReferenceArray:
            {
                obj = ObjectData.FromManagedPointer(m_Table.Snapshot, obj.GetReferencePointer());
                if (obj.hostManagedObjectPtr != 0)
                {
                    goto case ObjectDataType.Array;
                }
                return(-1);
            }

            case ObjectDataType.Array:
            {
                var arrayInfo = ArrayTools.GetArrayInfo(m_Table.Snapshot, obj.managedObjectData, obj.managedTypeIndex);
                return(arrayInfo.length);
            }

            default:
                return(-1);
            }
        }
        public string Format(ObjectData od, IDataFormatter formatter, bool objectBrief = true)
        {
            switch (od.dataType)
            {
            case ObjectDataType.BoxedValue:
                return(FormatValueType(od.GetBoxedValue(m_Snapshot, true), formatter, objectBrief));

            case ObjectDataType.Value:
                return(FormatValueType(od, formatter, objectBrief));

            case ObjectDataType.Object:
                return(FormatObject(od, formatter, objectBrief));

            case ObjectDataType.Array:
                return(FormatArray(od, formatter));

            case ObjectDataType.ReferenceObject:
            {
                ulong ptr = od.GetReferencePointer();
                if (ptr == 0)
                {
                    return(FormatPointer(ptr));
                }
                else
                {
                    var o = ObjectData.FromManagedPointer(m_Snapshot, ptr);
                    return(FormatObject(o, formatter, objectBrief));
                }
            }

            case ObjectDataType.ReferenceArray:
            {
                ulong ptr = od.GetReferencePointer();
                if (ptr == 0)
                {
                    return(FormatPointer(ptr));
                }
                var arr = ObjectData.FromManagedPointer(m_Snapshot, ptr);
                return(FormatArray(arr, formatter));
            }

            case ObjectDataType.Type:
                return(m_Snapshot.typeDescriptions.typeDescriptionName[od.managedTypeIndex]);

            case ObjectDataType.Global:
                return("<global>");

            case ObjectDataType.NativeObject:
                return(FormatPointer(m_Snapshot.nativeObjects.nativeObjectAddress[od.nativeObjectIndex]));

            default:
                return("<uninitialized type>");
            }
        }
Пример #3
0
        public override string GetRowValue(long row)
        {
            var d = m_Table.GetObjectData(row).displayObject;

            switch (d.dataType)
            {
            case ObjectDataType.Array:
            case ObjectDataType.BoxedValue:
            case ObjectDataType.Object:
            case ObjectDataType.ReferenceArray:
            case ObjectDataType.Value:
                if (d.managedTypeIndex < 0)
                {
                    return("<unknown type>");
                }
                return(m_Table.Snapshot.typeDescriptions.typeDescriptionName[d.managedTypeIndex]);

            case ObjectDataType.ReferenceObject:
            {
                var ptr = d.GetReferencePointer();
                if (ptr != 0)
                {
                    var obj = ObjectData.FromManagedPointer(m_Table.Snapshot, ptr);
                    if (obj.IsValid && obj.managedTypeIndex != d.managedTypeIndex)
                    {
                        return("(" + m_Table.Snapshot.typeDescriptions.typeDescriptionName[obj.managedTypeIndex] + ") "
                               + m_Table.Snapshot.typeDescriptions.typeDescriptionName[d.managedTypeIndex]);
                    }
                }
                return(m_Table.Snapshot.typeDescriptions.typeDescriptionName[d.managedTypeIndex]);
            }

            case ObjectDataType.Global:
                return("Global");

            case ObjectDataType.Type:
                return("Type");

            case ObjectDataType.NativeObject:
            {
                int iType = m_Table.Snapshot.nativeObjects.nativeTypeArrayIndex[d.nativeObjectIndex];
                return(m_Table.Snapshot.nativeTypes.typeName[iType]);
            }

            case ObjectDataType.Unknown:
            default:
                return("<unknown>");
            }
        }
Пример #4
0
 public ObjectSingleTable(Schema schema, SnapshotDataRenderer renderer, CachedSnapshot snapshot, ManagedData crawledData, ObjectData obj, ObjectMetaType metaType)
     : base(schema, renderer, snapshot, crawledData, metaType)
 {
     this.obj = obj;
     if (!obj.dataIncludeObjectHeader)
     {
         var od = ObjectData.FromManagedPointer(snapshot, obj.hostManagedObjectPtr);
         objOffset = obj.managedObjectData.offset - od.managedObjectData.offset;
     }
     else
     {
         objOffset = 0;
     }
     InitObjectList();
     ExpandCell(0, 0, true);
 }
Пример #5
0
        public override Database.Table CreateGroupTable(long groupIndex)
        {
            var subObj = GetObjectData(groupIndex).displayObject;

            switch (subObj.dataType)
            {
            case ObjectDataType.Array:
                return(new ObjectArrayTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType));

            case ObjectDataType.ReferenceArray:
            {
                var ptr = subObj.GetReferencePointer();
                subObj = ObjectData.FromManagedPointer(Snapshot, ptr);
                return(new ObjectArrayTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType));
            }

            case ObjectDataType.Value:
            case ObjectDataType.BoxedValue:
            case ObjectDataType.Object:
            case ObjectDataType.Type:
                return(new ObjectFieldTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType));

            case ObjectDataType.ReferenceObject:
            {
                var ptr = subObj.GetReferencePointer();
                subObj = ObjectData.FromManagedPointer(Snapshot, ptr);
                return(new ObjectFieldTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType));
            }

            case ObjectDataType.NativeObject:
                return(new ObjectReferenceTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType));

            default:
                return(null);
            }
        }
        public override Table GetTableByName(string name, ParameterSet param)
        {
            if (name == ObjectTable.TableName)
            {
                ulong obj;
                if (!TryGetParam(param, ObjectTable.ObjParamName, out obj))
                {
                    return(null);
                }
                int iType;
                if (!TryGetParam(param, ObjectTable.TypeParamName, out iType))
                {
                    iType = -1;
                }

                ObjectData od    = ObjectData.FromManagedPointer(m_Snapshot, obj, iType);
                var        table = new ObjectSingleTable(this, formatter, m_Snapshot, m_Snapshot.CrawledData, od, od.isNative ? ObjectTable.ObjectMetaType.Native : ObjectTable.ObjectMetaType.Managed);
                return(table);
            }
            else if (name == ObjectReferenceTable.kObjectReferenceTableName)
            {
                int objUnifiedIndex;
                if (!TryGetParam(param, ObjectTable.ObjParamName, out objUnifiedIndex))
                {
                    return(null);
                }
                var od    = ObjectData.FromUnifiedObjectIndex(m_Snapshot, objUnifiedIndex);
                var table = new ObjectReferenceTable(this, formatter, m_Snapshot, m_Snapshot.CrawledData, od, ObjectTable.ObjectMetaType.All); //, od.isNative ? ObjectTable.ObjectMetaType.Native : ObjectTable.ObjectMetaType.Managed);
                return(table);
                //ObjectReferenceTable
            }
            else
            {
                return(GetTableByName(name));
            }
        }
Пример #7
0
        public bool IsGroupExpandable(ObjectData od, bool forceExpandAllObject = false)
        {
            switch (od.dataType)
            {
            case ObjectDataType.Array:
            {
                var l = ArrayTools.ReadArrayLength(Snapshot, od.hostManagedObjectPtr, od.managedTypeIndex);
                return(l > 0 || forceExpandAllObject);
            }

            case ObjectDataType.ReferenceArray:
            {
                var ptr = od.GetReferencePointer();
                if (ptr != 0)
                {
                    var arr = ObjectData.FromManagedPointer(Snapshot, ptr);
                    var l   = ArrayTools.ReadArrayLength(Snapshot, arr.hostManagedObjectPtr, arr.managedTypeIndex);
                    return(l > 0 || forceExpandAllObject);
                }
                return(false);
            }

            case ObjectDataType.ReferenceObject:
            {
                ulong ptr = od.GetReferencePointer();
                if (ptr == 0)
                {
                    return(false);
                }
                var obj = ObjectData.FromManagedPointer(Snapshot, ptr);
                if (!obj.IsValid)
                {
                    return(false);
                }
                if (forceExpandAllObject)
                {
                    return(true);
                }
                if (!Renderer.IsExpandable(obj.managedTypeIndex))
                {
                    return(false);
                }
                return(Snapshot.typeDescriptions.HasAnyField(obj.managedTypeIndex));
            }

            case ObjectDataType.BoxedValue:
            case ObjectDataType.Object:
            case ObjectDataType.Value:
                if (forceExpandAllObject)
                {
                    return(true);
                }
                if (!Renderer.IsExpandable(od.managedTypeIndex))
                {
                    return(false);
                }
                return(Snapshot.typeDescriptions.HasAnyField(od.managedTypeIndex));

            case ObjectDataType.Type:
                if (!Renderer.IsExpandable(od.managedTypeIndex))
                {
                    return(false);
                }
                if (Renderer.flattenFields)
                {
                    return(Snapshot.typeDescriptions.HasAnyStaticField(od.managedTypeIndex));
                }
                else
                {
                    return(Snapshot.typeDescriptions.HasStaticField(od.managedTypeIndex));
                }

            default:
                return(false);
            }
        }