Пример #1
0
        private void ReceivedEvaluateResponse(DAPRequest request, DAPEvaulateRequest req, ThreadState state, BkEvaluateResponse response)
        {
            DAPEvaluateResponse evalResponse = new DAPEvaluateResponse
            {
                result             = "",
                namedVariables     = 0,
                indexedVariables   = 0,
                variablesReference = 0,
            };

            if (response.Result == null)
            {
                evalResponse.result = "(None)";
            }
            else
            {
                evalResponse.result = DbgValueToString(response.Result);

                if (response.Result.Variables != null)
                {
                    var varsRef = BackendVariableReference.FromDbg(state.Context, response.Result.Variables);
                    var varsIdx = NextVariableReference++;
                    VariableRefs.Add(varsIdx, varsRef);
                    evalResponse.variablesReference = MakeVariableRef(varsIdx);
                }
            }

            DAP.Stream.SendReply(request, evalResponse);
        }
Пример #2
0
        public void OnDAPEvaluateRequested(DAPRequest request, DAPEvaulateRequest req)
        {
            if (req.frameId == null)
            {
                throw new RequestFailedException("Cannot evaluate expressions in global scope");
            }

            var threadId   = req.frameId.Value >> 16;
            var frameIndex = req.frameId.Value & 0xffff;

            var state = DAP.GetThread(threadId);

            if (!state.Stopped)
            {
                throw new RequestFailedException("Can only evaluate expressions when stopped");
            }

            // TODO - evaluate in frame in later versions
            uint seq = DAP.DbgCli.SendEvaluate(state.Context, frameIndex, req.expression);

            PendingEvalRequests.Add(seq, (uint replySeq, StatusCode status, BkEvaluateResponse response) =>
            {
                if (status == StatusCode.Success)
                {
                    ReceivedEvaluateResponse(request, req, state, response);
                }
                else if (status == StatusCode.EvalFailed && response != null)
                {
                    DAP.Stream.SendReply(request, response.ErrorMessage);
                }
                else
                {
                    DAP.Stream.SendReply(request, $"Backend returned error: {status}");
                }
            });
        }