protected BaseDebugStackFrame(DebugDocumentContext.Factory debugDocumentContextFactory, IChildrenProviderFactory childrenProviderFactory, DebugCodeContext.Factory debugCodeContextFactory, CreateDebugExpressionDelegate createExpressionDelegate, IVariableInformationFactory varInfoFactory, IVariableInformationEnumFactory varInfoEnumFactory, AD7FrameInfoCreator ad7FrameInfoCreator, IRegisterSetsBuilder registerSetsBuilder, IDebugEngineHandler debugEngineHandler, RemoteFrame frame, IDebugThread2 thread, IGgpDebugProgram debugProgram, ITaskExecutor taskExecutor) { this.debugDocumentContextFactory = debugDocumentContextFactory; this._childrenProviderFactory = childrenProviderFactory; this.debugCodeContextFactory = debugCodeContextFactory; this.createExpressionDelegate = createExpressionDelegate; this.varInfoFactory = varInfoFactory; this.varInfoEnumFactory = varInfoEnumFactory; this.ad7FrameInfoCreator = ad7FrameInfoCreator; this.registerSetsBuilder = registerSetsBuilder; this.debugEngineHandler = debugEngineHandler; this.debugProgram = debugProgram; lldbFrame = frame; this.thread = thread; this._taskExecutor = taskExecutor; documentContext = new Lazy <IDebugDocumentContext2>(() => CreateDocumentContext()); codeContext = new Lazy <IDebugCodeContext2>(() => CreateCodeContext()); }
public virtual IDebugThreadAsync Create(AD7FrameInfoCreator ad7FrameInfoCreator, StackFramesProvider.StackFrameCreator stackFrameCreator, RemoteThread lldbThread, IGgpDebugProgram debugProgram) => new DebugThreadAsync(_taskExecutor, _frameEnumFactory, new StackFramesProvider( lldbThread, stackFrameCreator, debugProgram, ad7FrameInfoCreator, debugProgram), lldbThread);
public virtual IDebugStackFrame Create(AD7FrameInfoCreator ad7FrameInfoCreator, RemoteFrame frame, IDebugThread thread, IDebugEngineHandler debugEngineHandler, IGgpDebugProgram debugProgram) => new DebugStackFrame(debugDocumentContextFactory, childrenProviderFactory, debugCodeContextFactory, createExpressionDelegate, varInfoFactory, varInfoEnumFactory, ad7FrameInfoCreator, registerSetsBuilderFactory.Create(frame), debugEngineHandler, frame, thread, debugProgram, taskExecutor);
public StackFramesProvider(RemoteThread remoteThread, StackFrameCreator stackFrameCreator, IGgpDebugProgram debugProgram, AD7FrameInfoCreator ad7FrameInfoCreator, IGgpDebugProgram program) { _remoteThread = remoteThread; _stackFrameCreator = stackFrameCreator; _debugProgram = debugProgram; _ad7FrameInfoCreator = ad7FrameInfoCreator; _program = program; }
public void SetUp() { _remoteThread = Substitute.For <RemoteThread>(); _debugProgram = Substitute.For <IGgpDebugProgram>(); _ad7FrameInfoCreator = Substitute.For <AD7FrameInfoCreator>( Substitute.For <IDebugModuleCache>()); _ad7FrameInfoCreator .Create(Arg.Any <IDebugStackFrame>(), Arg.Any <FrameInfo <SbModule> >(), _debugProgram) .ReturnsForAnyArgs(args => CreateFRAMEINFO((IDebugStackFrame)args[0], (FrameInfo <SbModule>)args[1])); _debugThread = Substitute.For <IDebugThread>(); _stackFramesProvider = new StackFramesProvider(_remoteThread, CreateStackFrame, _debugProgram, _ad7FrameInfoCreator, _debugProgram); }
DebugStackFrameAsync(DebugDocumentContext.Factory debugDocumentContextFactory, IChildrenProviderFactory childrenProviderFactory, DebugCodeContext.Factory debugCodeContextFactory, CreateDebugExpressionDelegate createExpressionDelegate, IVariableInformationFactory varInfoFactory, IVariableInformationEnumFactory varInfoEnumFactory, AD7FrameInfoCreator ad7FrameInfoCreator, IRegisterSetsBuilder registerSetsBuilder, IDebugEngineHandler debugEngineHandler, RemoteFrame frame, IDebugThread2 thread, IGgpDebugProgram debugProgram, ITaskExecutor taskExecutor) : base(debugDocumentContextFactory, childrenProviderFactory, debugCodeContextFactory, createExpressionDelegate, varInfoFactory, varInfoEnumFactory, ad7FrameInfoCreator, registerSetsBuilder, debugEngineHandler, frame, thread, debugProgram, taskExecutor) { }
public ILldbAttachedProgram Create( IDebugProcess2 debugProcess, Guid programId, IDebugEngine2 debugEngine, IDebugEventCallback2 callback, SbDebugger debugger, RemoteTarget target, LldbListenerSubscriber listenerSubscriber, SbProcess process, SbCommandInterpreter commandInterpreter, bool isCoreAttach, IExceptionManager exceptionManager, IModuleSearchLogHolder moduleSearchLogHolder, uint remotePid) { // Required due to an issue triggered by the proxy used to wrap debugProgramFactory. // TODO: Remove assertion once the issue with Castle.DynamicProxy is // fixed. _taskContext.ThrowIfNotOnMainThread(); var debugEngineHandler = _debugEngineHandlerFactory.Create(debugEngine, callback); var binaryLoader = _binaryLoaderFactory.Create(target); var symbolLoader = _symbolLoaderFactory.Create(commandInterpreter); var moduleFileLoader = _moduleFileLoaderFactory.Create(symbolLoader, binaryLoader, moduleSearchLogHolder); var debugModuleCache = _debugModuleCacheFactory.Create( (lldbModule, loadOrder, ggpProgram) => _debugModuleFactory.Create( moduleFileLoader, moduleSearchLogHolder, lldbModule, loadOrder, debugEngineHandler, ggpProgram)); var ad7FrameInfoCreator = new AD7FrameInfoCreator(debugModuleCache); var stackFrameCreator = new StackFramesProvider.StackFrameCreator( (frame, thread, program) => _debugStackFrameCreator( ad7FrameInfoCreator, frame, thread, debugEngineHandler, program)); var threadCreator = new DebugProgram.ThreadCreator( (thread, program) => _debugThreadCreatorDelegate( ad7FrameInfoCreator, stackFrameCreator, thread, program)); var debugProgram = _debugProgramFactory.Create( debugEngineHandler, threadCreator, debugProcess, programId, process, target, debugModuleCache, isCoreAttach); _taskExecutor.StartAsyncTasks( ex => debugEngineHandler.Abort(debugProgram, ExitInfo.Error(ex))); var breakpointManager = _breakpointManagerFactory.Create(debugEngineHandler, debugProgram); var eventManager = _eventManagerFactory.Create(debugEngineHandler, breakpointManager, debugProgram, process, listenerSubscriber); // TODO: Listen for module load/unload events from LLDB binaryLoader.LldbModuleReplaced += (o, args) => { debugModuleCache.GetOrCreate(args.AddedModule, debugProgram); debugModuleCache.Remove(args.RemovedModule); }; debugModuleCache.ModuleAdded += (o, args) => debugEngineHandler.OnModuleLoad(args.Module, debugProgram); debugModuleCache.ModuleRemoved += (o, args) => debugEngineHandler.OnModuleUnload(args.Module, debugProgram); return(new LldbAttachedProgram(breakpointManager, eventManager, _lldbShell, moduleFileLoader, debugEngineHandler, _taskExecutor, debugProgram, debugger, target, process, exceptionManager, debugModuleCache, listenerSubscriber, remotePid)); }