if self._children is None:
self._children = [None] * self.child_count()
for idx in range(start, start + count):
+ # DAP was clarified to say that if too many children are
+ # requested, this is not an error, but instead the result
+ # is just truncated.
+ # https://github.com/microsoft/debug-adapter-protocol/issues/571
if idx >= len(self._children):
- raise DAPException(
- f"requested child {idx} outside range of variable {self._ref}"
- )
+ break
if self._children[idx] is None:
(name, value) = self.fetch_one_child(idx)
name = self._compute_name(name)
set deivals [dict get $refs body variables]
gdb_assert {[llength $deivals] == 2} "dei has two members"
-# Request more children than exist. See PR dap/33228.
-set seq [dap_send_request variables \
- [format {o variablesReference [i %d] count [i 100]} $dei_ref]]
-lassign [dap_read_response variables $seq] response ignore
-gdb_assert {[dict get $response success] == "false"} \
- "variables with invalid count"
+# Request more children than exist. See PR dap/33228 and
+# https://github.com/microsoft/debug-adapter-protocol/issues/571.
+set refs [lindex [dap_check_request_and_response "fetch too many variables" \
+ "variables" \
+ [format {o variablesReference [i %d] count [i 100]} \
+ $dei_ref]] \
+ 0]
+set deivals [dict get $refs body variables]
+gdb_assert {[llength $deivals] == 2} "still just two members"
set num [dict get $reg_scope variablesReference]
lassign [dap_check_request_and_response "fetch all registers" \