forked from Imagelibrary/binutils-gdb
This patch implements ValueFormat for DAP. Currently this only means supporting "hex". Note that StackFrameFormat is defined to have many more options, but none are currently recognized. It isn't entirely clear how these should be handled. I'll file a new gdb bug for this, and perhaps an upstream DAP bug as well. New in v2: - I realized that the "hover" context was broken, and furthermore that we only had tests for "hover" failing, not for it succeeding. This version fixes the oversight and adds a test. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30469
81 lines
2.8 KiB
Plaintext
81 lines
2.8 KiB
Plaintext
# Copyright 2023 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Test DAP "hover" evaluation.
|
|
|
|
require allow_dap_tests
|
|
|
|
load_lib dap-support.exp
|
|
|
|
standard_testfile
|
|
|
|
if {[build_executable ${testfile}.exp $testfile] == -1} {
|
|
return
|
|
}
|
|
|
|
if {[dap_launch $testfile] == ""} {
|
|
return
|
|
}
|
|
|
|
set line [gdb_get_line_number "BREAK"]
|
|
set obj [dap_check_request_and_response "set breakpoint by line number" \
|
|
setBreakpoints \
|
|
[format {o source [o path [%s]] breakpoints [a [o line [i %d]]]} \
|
|
[list s $srcfile] $line]]
|
|
set line_bpno [dap_get_breakpoint_number $obj]
|
|
|
|
dap_check_request_and_response "start inferior" configurationDone
|
|
dap_wait_for_event_and_check "inferior started" thread "body reason" started
|
|
|
|
dap_wait_for_event_and_check "stopped at breakpoint" stopped \
|
|
"body reason" breakpoint \
|
|
"body hitBreakpointIds" $line_bpno
|
|
|
|
set obj [dap_check_request_and_response "evaluate global" \
|
|
evaluate {o expression [s global_variable]}]
|
|
dap_match_values "global value in function" [lindex $obj 0] \
|
|
"body result" 23
|
|
|
|
set obj [dap_check_request_and_response "evaluate global as hex" \
|
|
evaluate {o expression [s global_variable] format [o hex [l true]]}]
|
|
dap_match_values "global value in function as hex" [lindex $obj 0] \
|
|
"body result" 0x17
|
|
|
|
set obj [dap_check_request_and_response "evaluate global in hover mode" \
|
|
evaluate {o context [s hover] expression [s global_variable]}]
|
|
dap_match_values "global value in hover mode" [lindex $obj 0] \
|
|
"body result" 23
|
|
|
|
set obj [dap_request_and_response \
|
|
evaluate {o context [s hover] expression [s increment()]}]
|
|
gdb_assert {[dict get [lindex $obj 0] success] == "false"} \
|
|
"increment was rejected in hover mode"
|
|
|
|
dap_check_request_and_response "call increment" \
|
|
evaluate {o expression [s increment()]}
|
|
|
|
set obj [dap_request_and_response \
|
|
evaluate {o context [s hover] \
|
|
expression [s "global_variable = -1"]}]
|
|
gdb_assert {[dict get [lindex $obj 0] success] == "false"} \
|
|
"assignment was rejected in hover mode"
|
|
|
|
set obj [dap_check_request_and_response "evaluate global again" \
|
|
evaluate {o expression [s global_variable]}]
|
|
dap_match_values "global value incremented once" [lindex $obj 0] \
|
|
"body result" 24
|
|
|
|
dap_shutdown
|