コード例 #1
0
        /// <summary>
        ///     Registers the repositories.
        /// </summary>
        /// <param name="options">The options.</param>
        public void RegisterRepositories(Options options)
        {
            var objRepo       = new DumpObjectRepository(Objects, Roots, BlockingObjects, FinalizerQueueObjects);
            var typeRepo      = new DumpTypeRepository(Types);
            var threadRepo    = new DumpThreadRepository(Threads);
            var appDomainRepo = new DumpAppDomainRepository(AppDomains);
            var moduleRepo    = new DumpModuleRepository(Modules);
            var handleRepo    = new DumpHandleRepository(Handles);
            var infoRepo      = new DumpInformationRepository(DataTarget, Runtime, DumpFile);

            CompositionContainer.ComposeExportedValue <IDumpObjectRepository>(objRepo);
            CompositionContainer.ComposeExportedValue <IDumpTypeRepository>(typeRepo);
            CompositionContainer.ComposeExportedValue <IDumpThreadRepository>(threadRepo);
            CompositionContainer.ComposeExportedValue <IDumpAppDomainRepository>(appDomainRepo);
            CompositionContainer.ComposeExportedValue <IDumpModuleRepository>(moduleRepo);
            CompositionContainer.ComposeExportedValue <IDumpHandleRepository>(handleRepo);
            CompositionContainer.ComposeExportedValue <IDumpInformationRepository>(infoRepo);
        }
コード例 #2
0
        public void Return_The_Correct_Values()
        {
            // arrange
            var startTime   = DateTime.Now;
            var moduleInfo  = new Mock <IModuleInfo>();
            var moduleInfos = new[] { moduleInfo.Object };
            var locator     = new SymbolLocatorBuilder()
                              .WithSymbolCache(@"c:\cache")
                              .WithSymbolPath(@"c:\symbols")
                              .Build();

            var heap = new ClrHeapBuilder()
                       .WithTotalSize(0x100)
                       .Build();

            var pool = new ClrThreadPoolBuilder()
                       .WithCpuUtilization(85)
                       .WithFreeCompletionPortCount(90)
                       .WithIdleThreads(11)
                       .WithMaxCompletionPorts(20)
                       .WithMaxFreeCompletionPorts(50)
                       .WithMaxThreads(100)
                       .WithMinCompletionPorts(8)
                       .WithMinThreads(12)
                       .WithRunningThreads(22)
                       .WithTotalThreads(123)
                       .Build();

            var clrVersion = new Mock <IClrInfo>();
            var runtime    = new ClrRuntimeBuilder()
                             .WithHeap(heap)
                             .WithHeapCount(3)
                             .WithServerGc(true)
                             .WithThreadPool(pool)
                             .Build();

            var dataReader = new Mock <IDataReader>();
            var dataTarget = new DataTargetBuilder()
                             .WithArchitecture(Architecture.Amd64)
                             .WithClrVersions(new List <IClrInfo>
            {
                clrVersion.Object
            })
                             .WithDataReader(dataReader.Object)
                             .WithIsMinidump(true)
                             .WithPointerSize(4)
                             .WithSymbolLocator(locator)
                             .WithEnumerateModules(moduleInfos)
                             .Build();
            var fileInfo = new FileInfo(@"C:\dumps\crash.dmp");
            var sut      = new DumpInformationRepository(dataTarget, runtime, fileInfo);

            // act
            // assert
            sut.CpuUtilization.Should().Be(85);
            sut.DumpFile.Should().Be(fileInfo);
            sut.HeapCount.Should().Be(3);
            sut.IsMiniDump.Should().Be(true);
            sut.IsServerGc.Should().Be(true);
            sut.MaxNumberFreeIoCompletionPorts.Should().Be(50);
            sut.MaxNumberIoCompletionPorts.Should().Be(20);
            sut.MaxThreads.Should().Be(100);
            sut.MinNumberIoCompletionPorts.Should().Be(8);
            sut.MinThreads.Should().Be(12);
            sut.NumberFreeIoCompletionPorts.Should().Be(90);
            sut.NumberIdleThreads.Should().Be(11);
            sut.NumRunningThreads.Should().Be(22);
            sut.ModuleInfos.SequenceEqual(moduleInfos).Should().BeTrue();
            sut.SymbolCache.Should().Be(@"c:\cache");
            sut.SymbolPath.Should().Be(@"c:\symbols");
            sut.TotalHeapSize.Should().Be(0x100);
            sut.TotalThreads.Should().Be(123);
            sut.StartTimeUtc.Should().BeCloseTo(startTime.ToUniversalTime(), 1000);
        }