public void OnGetVariablesFinished(UInt32 seq, BkGetVariablesResponse msg) { if (PendingGetVariablesRequests.TryGetValue(seq, out GetVariablesRequestHandlerDelegate handler)) { PendingGetVariablesRequests.Remove(seq); if (msg.ErrorMessage.Length > 0) { handler(seq, StatusCode.EvalFailed, msg); } else { handler(seq, StatusCode.Success, msg); } } else { DAP.LogError($"Response received for variables request {seq} that is not pending?"); } }
private void OnVariablesReceived(DAPRequest request, DAPVariablesRequest msg, ThreadState state, BkGetVariablesResponse response) { int startIndex = msg.start == null ? 0 : (int)msg.start; int numVars = (msg.count == null || msg.count == 0) ? response.Result.Count : (int)msg.count; int lastIndex = Math.Min(startIndex + numVars, response.Result.Count); // TODO req.filter, format var variables = new List <DAPVariable>(); for (var i = startIndex; i < startIndex + numVars; i++) { var variable = response.Result[i]; var dapVar = new DAPVariable { value = DbgValueToString(variable.Value), type = variable.Value.TypeId.ToString() }; if (variable.Type == MsgChildValue.Types.Type.Numeric) { dapVar.name = variable.Index.ToString(); } else { dapVar.name = variable.Name; } if (variable.Value.Variables != null) { var varsRef = BackendVariableReference.FromDbg(state.Context, variable.Value.Variables); var varsIdx = NextVariableReference++; VariableRefs.Add(varsIdx, varsRef); dapVar.variablesReference = MakeVariableRef(varsIdx); } variables.Add(dapVar); } var reply = new DAPVariablesResponse { variables = variables }; DAP.Stream.SendReply(request, reply); }