public void RecordMetrics() { var sequence = new SymbolStoreSequence(Substitute.For <IBinaryFileUtil>()); for (int i = 0; i < 4; ++i) { sequence.AddStore(Substitute.For <IFlatSymbolStore>()); } for (int i = 0; i < 3; ++i) { sequence.AddStore(Substitute.For <IStructuredSymbolStore>()); } for (int i = 0; i < 2; ++i) { sequence.AddStore(Substitute.For <IHttpSymbolStore>()); } sequence.AddStore(Substitute.For <IStadiaSymbolStore>()); mockSymbolPathParser = Substitute.For <SymbolPathParser>(); mockSymbolPathParser.Parse(SEARCH_PATHS).Returns(sequence); moduleFileFinder = new ModuleFileFinder(mockSymbolPathParser); var data = new LoadSymbolData(); moduleFileFinder.SetSearchPaths(SEARCH_PATHS); moduleFileFinder.RecordMetrics(data); Assert.AreEqual(4, data.FlatSymbolStoresCount); Assert.AreEqual(3, data.StructuredSymbolStoresCount); Assert.AreEqual(2, data.HttpSymbolStoresCount); Assert.AreEqual(1, data.StadiaSymbolStoresCount); }
public void Parse_HttpStore_Excluded() { pathParser = new SymbolPathParser(fakeFileSystem, fakeBinaryFileUtil, httpClient, crashReportClient, null, null, new string[] { "example.com" }); var store = pathParser.Parse(HTTP_STORE); var expected = new SymbolStoreSequence(fakeBinaryFileUtil); AssertEqualStores(expected, store); }
public void Parse_DefaultStore() { pathParser = new SymbolPathParser(fakeFileSystem, fakeBinaryFileUtil, httpClient, crashReportClient, null, DEFAULT_STORE); var store = pathParser.Parse($"srv*"); var expected = new SymbolStoreSequence(fakeBinaryFileUtil); var server = new SymbolServer(isCache: false); server.AddStore(new StructuredSymbolStore(fakeFileSystem, DEFAULT_STORE)); expected.AddStore(server); AssertEqualStores(expected, store); }
public void Parse_DefaultCache() { pathParser = new SymbolPathParser(fakeFileSystem, fakeBinaryFileUtil, httpClient, crashReportClient, DEFAULT_CACHE, null); var store = pathParser.Parse($"cache*"); var expected = new SymbolStoreSequence(fakeBinaryFileUtil); var cache = new SymbolServer(isCache: true); cache.AddStore(new StructuredSymbolStore(fakeFileSystem, DEFAULT_CACHE)); expected.AddStore(cache); AssertEqualStores(expected, store); }
public void SetUp() { searchLog = new StringWriter(); fileReference = Substitute.For <IFileReference>(); fileReference.IsFilesystemLocation.Returns(true); fileReference.Location.Returns(PATH_IN_STORE); mockSymbolStore = Substitute.For <ISymbolStore>(); mockSymbolStore.FindFileAsync(FILENAME, UUID, true, Arg.Any <TextWriter>()) .Returns(Task.FromResult(fileReference)); mockSymbolPathParser = Substitute.For <SymbolPathParser>(); mockSymbolPathParser.Parse(SEARCH_PATHS).Returns(mockSymbolStore); moduleFileFinder = new ModuleFileFinder(mockSymbolPathParser); }
public void Parse_CacheWithHttpStore() { pathParser = new SymbolPathParser(fakeFileSystem, fakeBinaryFileUtil, httpClient, crashReportClient, DEFAULT_CACHE, null); var store = pathParser.Parse($"cache*{HTTP_STORE}"); var expected = new SymbolStoreSequence(fakeBinaryFileUtil); var cache = new SymbolServer(isCache: true); cache.AddStore(new StructuredSymbolStore(fakeFileSystem, DEFAULT_CACHE)); cache.AddStore(new HttpSymbolStore(fakeFileSystem, httpClient, HTTP_STORE)); expected.AddStore(cache); AssertEqualStores(expected, store); StringAssert.Contains("Warning", logSpy.GetOutput()); }
public void Parse_DownstreamHttpStore_DefaultCache() { pathParser = new SymbolPathParser(fakeFileSystem, fakeBinaryFileUtil, httpClient, crashReportClient, DEFAULT_CACHE, null); var store = pathParser.Parse($"srv*{HTTP_STORE}*{STORE_B}"); var expected = new SymbolStoreSequence(fakeBinaryFileUtil); var server = new SymbolServer(isCache: false); server.AddStore(new StructuredSymbolStore(fakeFileSystem, DEFAULT_CACHE)); server.AddStore(new HttpSymbolStore(fakeFileSystem, httpClient, HTTP_STORE)); server.AddStore(new StructuredSymbolStore(fakeFileSystem, STORE_B)); expected.AddStore(server); AssertEqualStores(expected, store); StringAssert.Contains("Warning", logSpy.GetOutput()); }
public void SetUp() { fakeFileSystem = new MockFileSystem(); fakeBinaryFileUtil = new FakeBinaryFileUtil(fakeFileSystem); httpClient = new HttpClient(new FakeHttpMessageHandler()); crashReportClient = Substitute.For <ICrashReportClient>(); var store = new StructuredSymbolStore(fakeFileSystem, INITIALIZED_STORE); store.AddMarkerFileIfNeeded(); fakeFileSystem.AddFile(Path.Combine(STADIA_STORE, StadiaSymbolStore.MarkerFileName), new MockFileData("")); pathParser = new SymbolPathParser(fakeFileSystem, fakeBinaryFileUtil, httpClient, crashReportClient, null, null); logSpy = new LogSpy(); logSpy.Attach(); }
/// <summary> /// Creates a new debug engine factory. /// </summary> /// <param name="self">The external identity of the debug engine.</param> public virtual IDebugEngineFactory CreateDebugEngineFactory() { ServiceManager serviceManager = CreateServiceManager(); GetJoinableTaskContext().ThrowIfNotOnMainThread(); var vsExpressionCreator = new VsExpressionCreator(); if (GetVsiService().Options.LLDBVisualizerSupport == LLDBVisualizerSupport.ENABLED) { GetNatvis().VisualizerScanner.LoadProjectFiles(); } var debugEngineCommands = new DebugEngineCommands( GetJoinableTaskContext(), GetNatvis(), GetVsiService().Options.LLDBVisualizerSupport == LLDBVisualizerSupport.ENABLED); var actionRecorder = new ActionRecorder(GetDebugSessionMetrics()); var backgroundProcessFactory = new BackgroundProcess.Factory(); var processFactory = new ManagedProcess.Factory(); var binaryFileUtil = new ElfFileUtil(processFactory); var lldbModuleUtil = new LldbModuleUtil(); var symbolServerRequestHandler = new WebRequestHandler() { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, UseDefaultCredentials = true, CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore), }; var symbolServerHttpClient = new HttpClient(symbolServerRequestHandler); var symbolPathParser = new SymbolPathParser( GetFileSystem(), binaryFileUtil, symbolServerHttpClient, new CrashReportClient(GetCloudRunner()), SDKUtil.GetDefaultSymbolCachePath(), SDKUtil.GetDefaultSymbolStorePath(), YetiConstants.SymbolServerExcludeList); IModuleFileFinder moduleFileFinder = new ModuleFileFinder(symbolPathParser); IModuleFileLoaderFactory moduleFileLoaderFactory = new ModuleFileLoader.Factory(); var moduleFileLoadRecorderFactory = new ModuleFileLoadMetricsRecorder.Factory(lldbModuleUtil, moduleFileFinder); var symbolLoaderFactory = new SymbolLoader.Factory(lldbModuleUtil, binaryFileUtil, moduleFileFinder); var binaryLoaderFactory = new BinaryLoader.Factory(lldbModuleUtil, moduleFileFinder); var cancelableTaskFactory = GetCancelableTaskFactory(); var exceptionManagerFactory = new LldbExceptionManager.Factory(LinuxSignals.GetDefaultSignalsMap()); DebugModule.Factory debugModuleFactory = GetFactoryDecorator().Decorate(new DebugModule.Factory( cancelableTaskFactory, actionRecorder, moduleFileLoadRecorderFactory, lldbModuleUtil, GetSymbolSettingsProvider())); var debugModuleCacheFactory = new DebugModuleCache.Factory(GetDispatcher()); var debugMemoryContextFactory = GetFactoryDecorator().Decorate(new DebugMemoryContext.Factory()); var debugDocumentContextFactory = GetFactoryDecorator().Decorate(new DebugDocumentContext.Factory()); var debugCodeContextFactory = GetFactoryDecorator().Decorate( new DebugCodeContext.Factory(debugMemoryContextFactory)); var varInfoEnumFactory = GetFactoryDecorator().Decorate <IVariableInformationEnumFactory>( new VariableInformationEnum.Factory(GetTaskExecutor())); var concreteChildrenProviderFactory = new ChildrenProvider.Factory(); var childrenProviderFactory = GetFactoryDecorator().Decorate <IChildrenProviderFactory>( concreteChildrenProviderFactory); // TODO: Add test for this: (internal) bool asyncInterfacesEnabled = GetVsiService().Options.AsyncInterfaces == AsyncInterfaces.ENABLED; var debugPropertyFactory = GetFactoryDecorator().Decorate(new DebugProperty.Factory( varInfoEnumFactory, childrenProviderFactory, debugCodeContextFactory, vsExpressionCreator, GetTaskExecutor())); var debugPropertyAsyncFactory = GetFactoryDecorator().Decorate(new DebugAsyncProperty.Factory( varInfoEnumFactory, childrenProviderFactory, debugCodeContextFactory, vsExpressionCreator, GetTaskExecutor())); var createDebugPropertyDelegate = asyncInterfacesEnabled ?(CreateDebugPropertyDelegate) debugPropertyAsyncFactory.Create : debugPropertyFactory.Create; concreteChildrenProviderFactory.Initialize(createDebugPropertyDelegate); var asyncEvaluatorFactory = GetFactoryDecorator().Decorate(new AsyncExpressionEvaluator.Factory( createDebugPropertyDelegate, GetVarInfoBuilder(), vsExpressionCreator, new ErrorDebugProperty.Factory(), debugEngineCommands, GetVsiService().Options, GetExpressionEvaluationRecorder(), GetTimeSource())); var debugExpressionFactory = GetFactoryDecorator().Decorate( new DebugExpression.Factory(asyncEvaluatorFactory, GetTaskExecutor())); var debugAsyncExpressionFactory = GetFactoryDecorator().Decorate( new DebugAsyncExpression.Factory(asyncEvaluatorFactory, GetTaskExecutor())); var debugExpressionCreator = asyncInterfacesEnabled ?(CreateDebugExpressionDelegate) debugAsyncExpressionFactory.Create : debugExpressionFactory.Create; var registerSetsBuilderFactory = GetFactoryDecorator().Decorate( new RegisterSetsBuilder.Factory(GetVariableInformationFactory())); var debugStackFrameFactory = GetFactoryDecorator().Decorate(new DebugStackFrame.Factory( debugDocumentContextFactory, childrenProviderFactory, debugCodeContextFactory, debugExpressionCreator, GetVariableInformationFactory(), varInfoEnumFactory, registerSetsBuilderFactory, GetTaskExecutor())); var debugStackFrameFactoryAsync = GetFactoryDecorator().Decorate(new DebugStackFrameAsync.Factory( debugDocumentContextFactory, childrenProviderFactory, debugCodeContextFactory, debugExpressionCreator, GetVariableInformationFactory(), varInfoEnumFactory, registerSetsBuilderFactory, GetTaskExecutor())); var debugStackFrameCreator = asyncInterfacesEnabled ?(CreateDebugStackFrameDelegate) debugStackFrameFactoryAsync.Create : debugStackFrameFactory.Create; var debugThreadFactory = GetFactoryDecorator().Decorate(new DebugThread.Factory( GetFactoryDecorator().Decorate(new FrameEnumFactory()), _taskExecutor)); var debugThreadAsyncFactory = GetFactoryDecorator().Decorate(new DebugThreadAsync.Factory( GetFactoryDecorator().Decorate(new FrameEnumFactory()), _taskExecutor)); var debugThreadCreator = asyncInterfacesEnabled ?(CreateDebugThreadDelegate) debugThreadAsyncFactory.Create : debugThreadFactory.Create; var gameletFactory = GetGameletClientFactory(); var launchParamsConverter = new LaunchGameParamsConverter(GetSdkConfigFactory(), new QueryParametersParser()); var gameLaunchManager = new GameLaunchBeHelper(gameletFactory.Create(GetCloudRunner()), launchParamsConverter); var debugProgramFactory = GetFactoryDecorator().Decorate <IDebugProgramFactory>(new DebugProgram.Factory( GetJoinableTaskContext(), GetFactoryDecorator().Decorate(new DebugDisassemblyStream.Factory( debugCodeContextFactory, debugDocumentContextFactory)), debugDocumentContextFactory, debugCodeContextFactory, GetFactoryDecorator().Decorate(new ThreadEnumFactory()), GetFactoryDecorator().Decorate(new ModuleEnumFactory()), GetFactoryDecorator().Decorate(new CodeContextEnumFactory()))); var breakpointErrorEnumFactory = GetFactoryDecorator().Decorate(new BreakpointErrorEnumFactory()); var boundBreakpointEnumFactory = GetFactoryDecorator().Decorate(new BoundBreakpointEnumFactory()); var breakpointManagerFactory = new LldbBreakpointManager.Factory( GetJoinableTaskContext(), GetFactoryDecorator().Decorate(new DebugPendingBreakpoint.Factory( GetJoinableTaskContext(), GetFactoryDecorator().Decorate(new DebugBoundBreakpoint.Factory( debugDocumentContextFactory, debugCodeContextFactory, GetFactoryDecorator().Decorate(new DebugBreakpointResolution.Factory()))), breakpointErrorEnumFactory, boundBreakpointEnumFactory)), GetFactoryDecorator().Decorate(new DebugWatchpoint.Factory( GetJoinableTaskContext(), GetFactoryDecorator().Decorate(new DebugWatchpointResolution.Factory()), breakpointErrorEnumFactory, boundBreakpointEnumFactory))); var eventManagerFactory = new LldbEventManager.Factory(boundBreakpointEnumFactory, GetJoinableTaskContext()); var lldbDebuggerFactory = new GrpcDebuggerFactory(); var lldbListenerFactory = new GrpcListenerFactory(); var lldbPlatformShellCommandFactory = new GrpcPlatformShellCommandFactory(); var lldbPlatformFactory = new GrpcPlatformFactory(); var lldbPlatformConnectOptionsFactory = new GrpcPlatformConnectOptionsFactory(); var grpcInterceptors = CreateGrpcInterceptors(GetVsiService().DebuggerOptions); var vsOutputWindow = serviceManager.GetGlobalService(typeof(SVsOutputWindow)) as IVsOutputWindow; var callInvokerFactory = new PipeCallInvokerFactory(); var transportSessionFactory = new LldbTransportSession.Factory(new MemoryMappedFileFactory()); var yetiTransport = new YetiDebugTransport( GetJoinableTaskContext(), transportSessionFactory, callInvokerFactory, new GrpcConnectionFactory(GetJoinableTaskContext().Factory, grpcInterceptors.ToArray()), GetTaskExecutor().CancelAsyncOperationIfRequested, processFactory, GetDialogUtil(), vsOutputWindow, GetVsiService()); var testClientLauncherFactory = new ChromeClientsLauncher.Factory( new ChromeClientLaunchCommandFormatter(GetJsonUtil()), GetSdkConfigFactory(), GetChromeLauncher(backgroundProcessFactory)); var exitDialogUtil = new ExitDialogUtil(GetDialogUtil(), GetDialogExecutionContext()); var preflightBinaryChecker = new PreflightBinaryChecker(GetFileSystem(), binaryFileUtil); var lldbShell = serviceManager.GetGlobalService(typeof(SLLDBShell)) as ILLDBShell; var attachedProgramFactory = GetFactoryDecorator().Decorate <ILldbAttachedProgramFactory>( new LldbAttachedProgram.Factory( GetJoinableTaskContext(), GetFactoryDecorator().Decorate <IDebugEngineHandlerFactory>( new DebugEngineHandler.Factory(GetJoinableTaskContext())), GetTaskExecutor(), eventManagerFactory, debugProgramFactory, debugModuleCacheFactory, debugModuleFactory, debugThreadCreator, debugStackFrameCreator, lldbShell, breakpointManagerFactory, symbolLoaderFactory, binaryLoaderFactory, moduleFileLoaderFactory)); bool fastExpressionEvaluation = GetVsiService().Options.FastExpressionEvaluation == FastExpressionEvaluation.ENABLED; var dumpModulesProvider = new DumpModulesProvider(GetFileSystem()); var moduleSearchLogHolder = new ModuleSearchLogHolder(); var coreAttachWarningDialog = new CoreAttachWarningDialogUtil( GetJoinableTaskContext(), GetDialogUtil()); var debugSessionLauncherFactory = new DebugSessionLauncher.Factory( GetJoinableTaskContext(), lldbDebuggerFactory, lldbListenerFactory, lldbPlatformFactory, lldbPlatformConnectOptionsFactory, lldbPlatformShellCommandFactory, attachedProgramFactory, actionRecorder, moduleFileLoadRecorderFactory, exceptionManagerFactory, GetFileSystem(), fastExpressionEvaluation, moduleFileFinder, dumpModulesProvider, moduleSearchLogHolder, GetSymbolSettingsProvider(), coreAttachWarningDialog); var paramsFactory = new Params.Factory(GetJsonUtil()); var vsiLaunchFactory = new VsiGameLaunchFactory(gameletFactory.Create(GetCloudRunner()), GetCancelableTaskFactory(), gameLaunchManager, actionRecorder, GetDialogUtil()); var gameLauncher = new GameLauncher(gameletFactory.Create(GetCloudRunner()), GetVsiService(), launchParamsConverter, GetCancelableTaskFactory(), actionRecorder, GetDialogUtil(), vsiLaunchFactory); var remoteCommand = new RemoteCommand(processFactory); var remoteFile = new RemoteFile(processFactory); var remoteDeploy = new RemoteDeploy(remoteCommand, remoteFile, processFactory, GetFileSystem()); bool deployLldbServer = IsInternalEngine(); IDebugEngineFactory factory = new DebugEngine.Factory( GetJoinableTaskContext(), serviceManager, GetDebugSessionMetrics(), yetiTransport, actionRecorder, symbolServerHttpClient, moduleFileLoadRecorderFactory, moduleFileFinder, testClientLauncherFactory, GetNatvis(), GetNatvisDiagnosticLogger(), exitDialogUtil, preflightBinaryChecker, debugSessionLauncherFactory, paramsFactory, remoteDeploy, cancelableTaskFactory, GetDialogUtil(), GetNatvisLoggerOutputWindowListener(), GetSolutionExplorer(), debugEngineCommands, GetDebugEventCallbackDecorator(GetVsiService().DebuggerOptions), GetSymbolSettingsProvider(), deployLldbServer, gameLauncher); return(GetFactoryDecorator().Decorate(factory)); }
public ModuleFileFinder(SymbolPathParser symbolPathParser) { _symbolPathParser = symbolPathParser; _symbolStore = new NullSymbolStore(); }