diff options
author | Tom Tromey <tromey@adacore.com> | 2023-05-26 13:35:52 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2023-06-22 09:46:23 -0600 |
commit | 59e75852dd9edff2199c5cd27a9be9f596a2fba6 (patch) | |
tree | 9e4b2f16887749aedfd285527ad535d5456fe6f6 /gdb | |
parent | 5ad513ae6288b186b982017bc20e7d492220a2ba (diff) | |
download | fsf-binutils-gdb-59e75852dd9edff2199c5cd27a9be9f596a2fba6.zip fsf-binutils-gdb-59e75852dd9edff2199c5cd27a9be9f596a2fba6.tar.gz fsf-binutils-gdb-59e75852dd9edff2199c5cd27a9be9f596a2fba6.tar.bz2 |
Handle supportsVariablePaging in DAP
A bug report about the supportsVariablePaging capability in DAP
resulted in a clarification: when this capability is not present, DAP
implementations should ignore the paging parameters to the "variables"
request. This patch implements this clarification.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/python/lib/gdb/dap/evaluate.py | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dap/scopes.exp | 24 | ||||
-rw-r--r-- | gdb/testsuite/lib/dap-support.exp | 3 |
3 files changed, 25 insertions, 9 deletions
diff --git a/gdb/python/lib/gdb/dap/evaluate.py b/gdb/python/lib/gdb/dap/evaluate.py index af7bf43..a0b199a 100644 --- a/gdb/python/lib/gdb/dap/evaluate.py +++ b/gdb/python/lib/gdb/dap/evaluate.py @@ -20,7 +20,7 @@ import gdb.printing from typing import Optional from .frames import frame_for_id -from .server import capability, request +from .server import capability, request, client_bool_capability from .startup import send_gdb_with_response, in_gdb_thread from .varref import find_variable, VariableReference @@ -98,6 +98,11 @@ def _variables(ref, start, count): # Note that we ignore the 'filter' field. That seems to be # specific to javascript. def variables(*, variablesReference: int, start: int = 0, count: int = 0, **args): + # This behavior was clarified here: + # https://github.com/microsoft/debug-adapter-protocol/pull/394 + if not client_bool_capability("supportsVariablePaging"): + start = 0 + count = 0 result = send_gdb_with_response( lambda: _variables(variablesReference, start, count) ) diff --git a/gdb/testsuite/gdb.dap/scopes.exp b/gdb/testsuite/gdb.dap/scopes.exp index cf9174f..6937bad 100644 --- a/gdb/testsuite/gdb.dap/scopes.exp +++ b/gdb/testsuite/gdb.dap/scopes.exp @@ -67,13 +67,23 @@ gdb_assert {[dict get $reg_scope presentationHint] == "registers"} \ gdb_assert {[dict get $reg_scope namedVariables] > 0} "at least one register" set num [dict get $scope variablesReference] -set refs [lindex [dap_check_request_and_response "fetch variables" \ - "variables" \ - [format {o variablesReference [i %d] count [i 3]} \ - $num]] \ - 0] - -foreach var [dict get $refs body variables] { +# Send two requests and combine them, to verify that using a range +# works. +set refs1 [lindex [dap_check_request_and_response "fetch variables 0,1" \ + "variables" \ + [format {o variablesReference [i %d] count [i 2]} \ + $num]] \ + 0] +set refs2 [lindex [dap_check_request_and_response "fetch variables 2" \ + "variables" \ + [format {o variablesReference [i %d] \ + start [i 2] count [i 1]} \ + $num]] \ + 0] + +set vars [concat [dict get $refs1 body variables] \ + [dict get $refs2 body variables]] +foreach var $vars { set name [dict get $var name] if {$name != "dei"} { diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp index 92484bf..e3750e1 100644 --- a/gdb/testsuite/lib/dap-support.exp +++ b/gdb/testsuite/lib/dap-support.exp @@ -232,7 +232,8 @@ proc _dap_initialize {name} { } return [dap_check_request_and_response $name initialize \ {o clientID [s "gdb testsuite"] \ - supportsVariableType [l true]}] + supportsVariableType [l true] \ + supportsVariablePaging [l true]}] } # Start gdb, send a DAP initialize request, and then a launch request |