コード例 #1
0
        public HeapDumpObjectPacket(_DBG.BitStream stream)
            : base(Commands.c_Profiling_HeapDump_Object)
        {
            m_address = ReadAndUnpackBits(stream);
            m_size    = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize;
            m_dt      = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType);
            if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE)
            {
                m_typedef = ReadTypeDefIndex(stream);
            }
            else if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
            {
                m_arrayElementType = ReadTypeDefIndex(stream);
                m_arrayLevels      = (ushort)ReadAndUnpackBits(stream);
            }

            m_refs = new List <uint>();

            bool moreRefs;

            while (moreRefs = ReadBoolean(stream))
            {
                m_refs.Add(ReadAndUnpackBits(stream));
            }
        }
コード例 #2
0
 public ObjectAllocationPacket(_DBG.BitStream stream)
     : base(Commands.c_Profiling_Allocs_Alloc)
 {
     m_address = ReadAndUnpackBits(stream);
     m_size    = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize;
     m_dt      = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType);
     if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE ||
         m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
     {
         m_type = ReadTypeDefIndex(stream);
         if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
         {
             m_rank = (ushort)ReadAndUnpackBits(stream);
         }
     }
     else
     {
         m_type = (uint)m_dt;
     }
 }
コード例 #3
0
        internal override void Process(ProfilerSession sess)
        {
            if (sess.m_currentHeapDump == null)
            {
                //Lost heap-dump start packet, and probably the roots too.
                throw new System.IO.IOException();
            }

            HeapDumpObject hdo = new HeapDumpObject();

            hdo.m_address = m_address;
            hdo.m_size    = m_size;

            if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE)
            {
                sess.ResolveTypeName(m_typedef); //Cache type name.
                hdo.m_type = new ObjectType(m_typedef);
            }
            else
            {
                _DBG.RuntimeDataType dt = (_DBG.RuntimeDataType)m_dt;
                if (dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
                {
                    sess.ResolveTypeName(m_arrayElementType); //Cache type name.
                    hdo.m_type = new ObjectType(m_arrayElementType, m_arrayLevels);
                }
                else
                {
                    hdo.m_type = new ObjectType((uint)m_dt);
                }
            }

            hdo.m_references = m_refs;

            Tracing.PacketTrace("object @ {0} ({1})", m_address, hdo.m_type);

            sess.m_currentHeapDump.m_objectTable.Add(hdo);
        }
コード例 #4
0
 public ObjectAllocationPacket(_DBG.BitStream stream)
     : base(Commands.c_Profiling_Allocs_Alloc)
 {
     m_address = ReadAndUnpackBits(stream);
     m_size = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize;
     m_dt = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType);
     if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE ||
         m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
     {
         m_type = ReadTypeDefIndex(stream);
         if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
         {
             m_rank = (ushort)ReadAndUnpackBits(stream);
         }
     }
     else
     {
         m_type = (uint)m_dt;
     }
 }
コード例 #5
0
        public HeapDumpObjectPacket(_DBG.BitStream stream)
            : base(Commands.c_Profiling_HeapDump_Object)
        {
            m_address = ReadAndUnpackBits(stream);
            m_size = ReadAndUnpackBits(stream) * ProfilerSession.HeapBlockSize;
            m_dt = (_DBG.RuntimeDataType)stream.ReadBits(Commands.Bits.DataType);
            if (m_dt == _DBG.RuntimeDataType.DATATYPE_CLASS || m_dt == _DBG.RuntimeDataType.DATATYPE_VALUETYPE)
            {
                m_typedef = ReadTypeDefIndex(stream);
            }
            else if (m_dt == _DBG.RuntimeDataType.DATATYPE_SZARRAY)
            {
                m_arrayElementType = ReadTypeDefIndex(stream);
                m_arrayLevels = (ushort)ReadAndUnpackBits(stream);
            }

            m_refs = new List<uint>();

            bool moreRefs;
            while (moreRefs = ReadBoolean(stream))
            {
                m_refs.Add(ReadAndUnpackBits(stream));
            }
        }