Example #1
0
 public HeapReconstructor(DataSource aDataSource, Options aOptions, DbgEngine aDebugEngine)
 {
     iRelationshipInspector            = new RelationshipInspector(iData, iStatistics);
     iRelationshipInspector.iObserver += new AsyncReaderBase.Observer(RelationshipInspector_Observer);
     //
     iExtractor                    = new RHeapExtractor(aDataSource, aOptions, aDebugEngine, iRelationshipInspector, iStatistics, iData);
     iExtractor.iObserver         += new AsyncReaderBase.Observer(Extractor_Observer);
     iExtractor.iExceptionHandler += new AsyncReaderBase.ExceptionHandler(Extractor_ExceptionHandler);
 }
        public RHeapExtractor(DataSource aDataSource, Options aOptions, DbgEngine aDebugEngine, RelationshipInspector aRelationshipInspector, HeapStatistics aStatistics, HeapCellArray aData)
        {
            iData                  = aData;
            iOptions               = aOptions;
            iStatistics            = aStatistics;
            iDataSource            = aDataSource;
            iDebugEngine           = aDebugEngine;
            iState                 = new ExtractionState(aDataSource);
            iRelationshipInspector = aRelationshipInspector;
            //
            HeapCell.AllocatedCellHeaderSize = AllocatedCellHeaderSize;

            // Must prime these
            iState.NextFreeCellAddress = aDataSource.MetaData.Heap.InfoFree.FreeCellAddress;
            iState.NextFreeCellLength  = aDataSource.MetaData.Heap.InfoFree.FreeCellLength;
            //
            if (iState.NextFreeCellAddress == 0)
            {
                throw new ArgumentException("Next free cell information invalid");
            }

            //iState.DebugEnabled = true;
        }