public List <FrameInfoPair> GetFramesWithInfo(
            FrameInfoFlags fields, uint startIndex, uint maxCount)
        {
            var framesWithInfo = new List <FrameInfoPair>();

            /// This is a workaround to avoid calling <see cref="sbThread.GetNumFrames"/>.
            /// It is a very expensive call for cases when stack is significantly larger
            /// than <see cref="startIndex+maxCount"/>, because it traverses the whole stack.
            for (uint i = startIndex; i < startIndex + maxCount; ++i)
            {
                SbFrame ithFrame = sbThread.GetFrameAtIndex(i);

                if (ithFrame == null)
                {
                    // We have reached the end of stack, no need to load next frames.
                    break;
                }

                var frame = remoteFrameFactory.Create(ithFrame);
                framesWithInfo.Add(
                    new FrameInfoPair {
                    Frame = frame, Info = frame.GetInfo(fields)
                });
            }

            return(framesWithInfo);
        }
Example #2
0
 RemoteFrameImpl(SbFrame sbFrame, RemoteThreadImpl.Factory threadFactory,
                 RemoteValueImpl.Factory valueFactory,
                 ILldbExpressionOptionsFactory expressionOptionsFactory)
 {
     _sbFrame                  = sbFrame;
     _threadFactory            = threadFactory;
     _valueFactory             = valueFactory;
     _expressionOptionsFactory = expressionOptionsFactory;
 }
 SbFrame CreateMockStackFrame()
 {
     mockDebuggerStackFrame = Substitute.For <SbFrame>();
     mockDebuggerStackFrame.GetPC().Returns(TEST_PC);
     mockDebuggerStackFrame.GetThread().GetProcess().GetTarget().Returns(mockTarget);
     mockDebuggerStackFrame.GetFunction().GetStartAddress().GetLoadAddress(mockTarget)
     .Returns(FUNCTION_ADDRESS_MIN);
     mockDebuggerStackFrame.GetFunction().GetEndAddress().GetLoadAddress(mockTarget)
     .Returns(FUNCTION_ADDRESS_MAX);
     mockDebuggerStackFrame.GetSymbol().GetStartAddress().GetLoadAddress(mockTarget)
     .Returns(SYMBOL_ADDRESS_MIN);
     mockDebuggerStackFrame.GetSymbol().GetEndAddress().GetLoadAddress(mockTarget)
     .Returns(SYMBOL_ADDRESS_MAX);
     mockDebuggerStackFrame.GetFunctionName().Returns(NAME);
     return(mockDebuggerStackFrame);
 }
        public void SetUp()
        {
            mockTarget             = Substitute.For <SbTarget>();
            mockDebuggerStackFrame = CreateMockStackFrame();

            var mockArgument1 = Substitute.For <SbValue>();

            mockArgument1.GetValue().Returns(ARG1_VALUE);

            var mockArgument2 = Substitute.For <SbValue>();

            mockArgument2.GetValue().Returns(ARG2_VALUE);

            var functionArguments = new List <SbValue>();

            functionArguments.Add(mockArgument1);
            functionArguments.Add(mockArgument2);

            mockDebuggerStackFrame.GetVariables(true, false, false, false).Returns(
                functionArguments);

            mockDebuggerStackFrame.GetFunction().GetArgumentName(0).Returns(ARG1_NAME);
            mockDebuggerStackFrame.GetFunction().GetArgumentName(1).Returns(ARG2_NAME);

            var mockArgTypeList = Substitute.For <SbTypeList>();

            mockArgTypeList.GetSize().Returns(2u);
            mockArgTypeList.GetTypeAtIndex(0u).GetName().Returns(ARG1_TYPE_NAME);
            mockArgTypeList.GetTypeAtIndex(1u).GetName().Returns(ARG2_TYPE_NAME);

            var mockFunctionType = Substitute.For <SbType>();

            mockFunctionType.GetFunctionArgumentTypes().Returns(mockArgTypeList);

            mockDebuggerStackFrame.GetFunction().GetType().Returns(mockFunctionType);

            var optionsFactory = Substitute.For <ILldbExpressionOptionsFactory>();
            var valueFactory   = new RemoteValueImpl.Factory(optionsFactory);

            stackFrame = new RemoteFrameImpl.Factory(valueFactory, optionsFactory)
                         .Create(mockDebuggerStackFrame);
        }
Example #5
0
 public RemoteFrame Create(SbFrame sbFrame) =>
 sbFrame != null ? new RemoteFrameImpl(
     sbFrame, _threadFactory, _valueFactory, _expressionOptionsFactory) : null;