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); }
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}"); } }); }