diff options
30 files changed, 258 insertions, 182 deletions
diff --git a/gdb/python/lib/gdb/dap/breakpoint.py b/gdb/python/lib/gdb/dap/breakpoint.py index 87e7464..b4fb112 100644 --- a/gdb/python/lib/gdb/dap/breakpoint.py +++ b/gdb/python/lib/gdb/dap/breakpoint.py @@ -28,17 +28,6 @@ from .startup import in_gdb_thread, log_stack, parse_and_eval, LogLevel, DAPExce from .typecheck import type_check -@in_gdb_thread -def _bp_modified(event): - send_event( - "breakpoint", - { - "reason": "changed", - "breakpoint": _breakpoint_descriptor(event), - }, - ) - - # True when suppressing new breakpoint events. _suppress_bp = False @@ -56,6 +45,19 @@ def suppress_new_breakpoint_event(): @in_gdb_thread +def _bp_modified(event): + global _suppress_bp + if not _suppress_bp: + send_event( + "breakpoint", + { + "reason": "changed", + "breakpoint": _breakpoint_descriptor(event), + }, + ) + + +@in_gdb_thread def _bp_created(event): global _suppress_bp if not _suppress_bp: @@ -70,13 +72,15 @@ def _bp_created(event): @in_gdb_thread def _bp_deleted(event): - send_event( - "breakpoint", - { - "reason": "removed", - "breakpoint": _breakpoint_descriptor(event), - }, - ) + global _suppress_bp + if not _suppress_bp: + send_event( + "breakpoint", + { + "reason": "removed", + "breakpoint": _breakpoint_descriptor(event), + }, + ) gdb.events.breakpoint_created.connect(_bp_created) @@ -97,11 +101,10 @@ def _breakpoint_descriptor(bp): "Return the Breakpoint object descriptor given a gdb Breakpoint." result = { "id": bp.number, - # We always use True here, because this field just indicates - # that breakpoint creation was successful -- and if we have a - # breakpoint, the creation succeeded. - "verified": True, + "verified": not bp.pending, } + if bp.pending: + result["reason"] = "pending" if bp.locations: # Just choose the first location, because DAP doesn't allow # multiple locations. See @@ -146,52 +149,55 @@ def _set_breakpoints_callback(kind, specs, creator): saved_map = {} breakpoint_map[kind] = {} result = [] - for spec in specs: - # It makes sense to reuse a breakpoint even if the condition - # or ignore count differs, so remove these entries from the - # spec first. - (condition, hit_condition) = _remove_entries(spec, "condition", "hitCondition") - keyspec = frozenset(spec.items()) - - # Create or reuse a breakpoint. If asked, set the condition - # or the ignore count. Catch errors coming from gdb and - # report these as an "unverified" breakpoint. - bp = None - try: - if keyspec in saved_map: - bp = saved_map.pop(keyspec) - else: - with suppress_new_breakpoint_event(): + with suppress_new_breakpoint_event(): + for spec in specs: + # It makes sense to reuse a breakpoint even if the condition + # or ignore count differs, so remove these entries from the + # spec first. + (condition, hit_condition) = _remove_entries( + spec, "condition", "hitCondition" + ) + keyspec = frozenset(spec.items()) + + # Create or reuse a breakpoint. If asked, set the condition + # or the ignore count. Catch errors coming from gdb and + # report these as an "unverified" breakpoint. + bp = None + try: + if keyspec in saved_map: + bp = saved_map.pop(keyspec) + else: bp = creator(**spec) - bp.condition = condition - if hit_condition is None: - bp.ignore_count = 0 - else: - bp.ignore_count = int( - parse_and_eval(hit_condition, global_context=True) + bp.condition = condition + if hit_condition is None: + bp.ignore_count = 0 + else: + bp.ignore_count = int( + parse_and_eval(hit_condition, global_context=True) + ) + + # Reaching this spot means success. + breakpoint_map[kind][keyspec] = bp + result.append(_breakpoint_descriptor(bp)) + # Exceptions other than gdb.error are possible here. + except Exception as e: + # Don't normally want to see this, as it interferes with + # the test suite. + log_stack(LogLevel.FULL) + # Maybe the breakpoint was made but setting an attribute + # failed. We still want this to fail. + if bp is not None: + bp.delete() + # Breakpoint creation failed. + result.append( + { + "verified": False, + "reason": "failed", + "message": str(e), + } ) - # Reaching this spot means success. - breakpoint_map[kind][keyspec] = bp - result.append(_breakpoint_descriptor(bp)) - # Exceptions other than gdb.error are possible here. - except Exception as e: - # Don't normally want to see this, as it interferes with - # the test suite. - log_stack(LogLevel.FULL) - # Maybe the breakpoint was made but setting an attribute - # failed. We still want this to fail. - if bp is not None: - bp.delete() - # Breakpoint creation failed. - result.append( - { - "verified": False, - "message": str(e), - } - ) - # Delete any breakpoints that were not reused. for entry in saved_map.values(): entry.delete() diff --git a/gdb/python/lib/gdb/dap/launch.py b/gdb/python/lib/gdb/dap/launch.py index 184af16..6783d99 100644 --- a/gdb/python/lib/gdb/dap/launch.py +++ b/gdb/python/lib/gdb/dap/launch.py @@ -23,16 +23,6 @@ from .server import request, capability from .startup import exec_and_log, DAPException -# The program being launched, or None. This should only be accessed -# from the gdb thread. -_program = None - - -# True if the program was attached, False otherwise. This should only -# be accessed from the gdb thread. -_attach = False - - # Any parameters here are necessarily extensions -- DAP requires this # from implementations. Any additions or changes here should be # documented in the gdb manual. @@ -46,10 +36,6 @@ def launch( stopAtBeginningOfMainSubprogram: bool = False, **extra, ): - global _program - _program = program - global _attach - _attach = False if cwd is not None: exec_and_log("cd " + cwd) if program is not None: @@ -64,6 +50,8 @@ def launch( inf.clear_env() for name, value in env.items(): inf.set_env(name, value) + expect_process("process") + exec_and_expect_stop("run") @request("attach") @@ -74,11 +62,6 @@ def attach( target: Optional[str] = None, **args, ): - # Ensure configurationDone does not try to run. - global _attach - _attach = True - global _program - _program = program if program is not None: exec_and_log("file " + program) if pid is not None: @@ -93,9 +76,7 @@ def attach( @capability("supportsConfigurationDoneRequest") -@request("configurationDone", response=False) +@request("configurationDone") def config_done(**args): - global _attach - if not _attach: - expect_process("process") - exec_and_expect_stop("run") + # Nothing to do. + return None diff --git a/gdb/testsuite/gdb.dap/ada-arrays.exp b/gdb/testsuite/gdb.dap/ada-arrays.exp index 7928aa1..0de361f 100644 --- a/gdb/testsuite/gdb.dap/ada-arrays.exp +++ b/gdb/testsuite/gdb.dap/ada-arrays.exp @@ -29,7 +29,7 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != ""} { return -1 } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -42,7 +42,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s cstuff.c] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/ada-nested.exp b/gdb/testsuite/gdb.dap/ada-nested.exp index f543fef..3415da3 100644 --- a/gdb/testsuite/gdb.dap/ada-nested.exp +++ b/gdb/testsuite/gdb.dap/ada-nested.exp @@ -27,7 +27,7 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ return -1 } -if {[dap_launch $binfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -39,8 +39,11 @@ set obj [dap_check_request_and_response "set breakpoint" \ [list s $srcfile] $line]] set fn_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $binfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $fn_bpno diff --git a/gdb/testsuite/gdb.dap/ada-scopes.exp b/gdb/testsuite/gdb.dap/ada-scopes.exp index 070dead..12004f8 100644 --- a/gdb/testsuite/gdb.dap/ada-scopes.exp +++ b/gdb/testsuite/gdb.dap/ada-scopes.exp @@ -25,7 +25,7 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ return -1 } -if {[dap_launch $binfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -37,8 +37,11 @@ set obj [dap_check_request_and_response "set breakpoint" \ [list s $srcfile] $line]] set fn_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $binfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $fn_bpno diff --git a/gdb/testsuite/gdb.dap/args-env.exp b/gdb/testsuite/gdb.dap/args-env.exp index 0f07fd2..d651173 100644 --- a/gdb/testsuite/gdb.dap/args-env.exp +++ b/gdb/testsuite/gdb.dap/args-env.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile arguments {a "b c"} env {{DEI something}}] == ""} { +if {[dap_initialize] == ""} { return } @@ -36,7 +36,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile arguments {a "b c"} env {{DEI something}}] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/assign.exp b/gdb/testsuite/gdb.dap/assign.exp index 386bf03..6703a97 100644 --- a/gdb/testsuite/gdb.dap/assign.exp +++ b/gdb/testsuite/gdb.dap/assign.exp @@ -31,7 +31,7 @@ set remote_python_file [gdb_remote_download host \ save_vars GDBFLAGS { append GDBFLAGS " -iex \"source $remote_python_file\"" - if {[dap_launch $testfile] == ""} { + if {[dap_initialize] == ""} { return } } @@ -43,8 +43,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $line_bpno diff --git a/gdb/testsuite/gdb.dap/basic-dap.exp b/gdb/testsuite/gdb.dap/basic-dap.exp index 431ea3d..6ef9a5b 100644 --- a/gdb/testsuite/gdb.dap/basic-dap.exp +++ b/gdb/testsuite/gdb.dap/basic-dap.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -72,21 +72,6 @@ if {$ok} { fail "check lack of new breakpoint event" } -# Check that there are breakpoint locations on each line between FIRST -# and BREAK. -set first_line [gdb_get_line_number "FIRST"] -set last_line [expr {$line - 1}] -set obj [dap_check_request_and_response "breakpoint locations" \ - breakpointLocations \ - [format {o source [o path [%s]] line [i %d] endLine [i %d]} \ - [list s $srcfile] $first_line $last_line]] -# We know gdb returns the lines in sorted order. -foreach entry [dict get [lindex $obj 0] body breakpoints] { - gdb_assert {[dict get $entry line] == $first_line} \ - "line $first_line in result" - incr first_line -} - # Note that in this request, we add a 'source' field to the # SourceBreakpoint object. This isn't in the spec but it once caused # an incorrect exception in the Python code. See PR dap/30820. @@ -99,23 +84,15 @@ set obj [dap_check_request_and_response "reset breakpoint by line number" \ set new_line_bpno [dap_get_breakpoint_number $obj] gdb_assert {$new_line_bpno == $line_bpno} "re-setting kept same breakpoint number" -# This uses "&address_breakpoint_here" as the address -- this is a -# hack because we know how this is implemented under the hood. -set obj [dap_check_request_and_response "set breakpoint by address" \ - setInstructionBreakpoints \ - {o breakpoints [a [o instructionReference [s &address_breakpoint_here]]]}] -set insn_bpno [dap_get_breakpoint_number $obj] - -set response [lindex $obj 0] -set bplist [dict get $response body breakpoints] -set insn_pc [dict get [lindex $bplist 0] instructionReference] +dap_check_request_and_response "configurationDone" configurationDone -dap_check_request_and_response "start inferior" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started # While waiting for the stopped event, we might receive breakpoint changed -# events indicating some breakpoint addresses were relocated. Update INSN_PC -# if necessary. +# events indicating some breakpoint addresses were relocated. lassign [dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $fn_bpno] unused objs @@ -136,12 +113,32 @@ foreach obj $objs { set breakpoint [dict get $body "breakpoint"] set breakpoint_id [dict get $breakpoint "id"] +} - if { $breakpoint_id != $insn_bpno } { - continue - } +# This uses "&address_breakpoint_here" as the address -- this is a +# hack because we know how this is implemented under the hood. +set obj [dap_check_request_and_response "set breakpoint by address" \ + setInstructionBreakpoints \ + {o breakpoints [a [o instructionReference [s &address_breakpoint_here]]]}] +set insn_bpno [dap_get_breakpoint_number $obj] + +set response [lindex $obj 0] +set bplist [dict get $response body breakpoints] +set insn_pc [dict get [lindex $bplist 0] instructionReference] - set insn_pc [dict get $breakpoint "instructionReference"] +# Check that there are breakpoint locations on each line between FIRST +# and BREAK. +set first_line [gdb_get_line_number "FIRST"] +set last_line [expr {$line - 1}] +set obj [dap_check_request_and_response "breakpoint locations" \ + breakpointLocations \ + [format {o source [o path [%s]] line [i %d] endLine [i %d]} \ + [list s $srcfile] $first_line $last_line]] +# We know gdb returns the lines in sorted order. +foreach entry [dict get [lindex $obj 0] body breakpoints] { + gdb_assert {[dict get $entry line] == $first_line} \ + "line $first_line in result" + incr first_line } set obj [dap_check_request_and_response "evaluate global in function" \ diff --git a/gdb/testsuite/gdb.dap/bt-nodebug.exp b/gdb/testsuite/gdb.dap/bt-nodebug.exp index 57d4dac..550b9c5 100644 --- a/gdb/testsuite/gdb.dap/bt-nodebug.exp +++ b/gdb/testsuite/gdb.dap/bt-nodebug.exp @@ -27,7 +27,7 @@ if {[build_executable_from_specs $testfile.exp $testfile {} \ return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -36,7 +36,11 @@ set obj [dap_check_request_and_response "set breakpoint on inner" \ {o breakpoints [a [o name [s function_breakpoint_here]]]}] set fn_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started lassign [dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/catch-exception.exp b/gdb/testsuite/gdb.dap/catch-exception.exp index 8ca0a83..166b862 100644 --- a/gdb/testsuite/gdb.dap/catch-exception.exp +++ b/gdb/testsuite/gdb.dap/catch-exception.exp @@ -25,7 +25,7 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ return -1 } -if {[dap_launch $binfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -61,8 +61,11 @@ foreach spec $bps { incr i } -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $binfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at first raise" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" 2 diff --git a/gdb/testsuite/gdb.dap/children.exp b/gdb/testsuite/gdb.dap/children.exp index b2444e0..f5dfe2c 100644 --- a/gdb/testsuite/gdb.dap/children.exp +++ b/gdb/testsuite/gdb.dap/children.exp @@ -31,7 +31,7 @@ set remote_python_file [gdb_remote_download host \ save_vars GDBFLAGS { append GDBFLAGS " -iex \"source $remote_python_file\"" - if {[dap_launch $testfile] == ""} { + if {[dap_initialize] == ""} { return } } @@ -43,8 +43,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $line_bpno diff --git a/gdb/testsuite/gdb.dap/cond-bp.exp b/gdb/testsuite/gdb.dap/cond-bp.exp index 427776a..2bd52ba 100644 --- a/gdb/testsuite/gdb.dap/cond-bp.exp +++ b/gdb/testsuite/gdb.dap/cond-bp.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -44,8 +44,13 @@ set i 1 foreach bp [dict get [lindex $obj 0] body breakpoints] { gdb_assert {[dict get $bp verified] == "false"} \ "breakpoint $i invalid" - gdb_assert {[dict get $bp message] != ""} \ - "breakpoint $i has message" + if {$i == 1} { + gdb_assert {[dict get $bp reason] == "pending"} \ + "breakpoint $i pending" + } else { + gdb_assert {[dict get $bp message] != ""} \ + "breakpoint $i has message" + } incr i } @@ -58,8 +63,11 @@ set obj [dap_check_request_and_response "set conditional breakpoint" \ [list s $srcfile] $line]] set fn_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $fn_bpno diff --git a/gdb/testsuite/gdb.dap/cwd.exp b/gdb/testsuite/gdb.dap/cwd.exp index 9e1d070..6b88299 100644 --- a/gdb/testsuite/gdb.dap/cwd.exp +++ b/gdb/testsuite/gdb.dap/cwd.exp @@ -25,6 +25,12 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} { return } +if {[dap_initialize] == ""} { + return +} + +dap_check_request_and_response "configurationDone" configurationDone + # Starting the inferior will fail if the change of cwd does not work. set the_dir [file dirname $testfile] set the_file [file tail $testfile] @@ -32,7 +38,6 @@ if {[dap_launch $the_file cwd $the_dir stop_at_main 1] == ""} { return } -dap_check_request_and_response "start inferior" configurationDone # We didn't explicitly set a breakpoint, so if we hit one, it worked. dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ "body reason" breakpoint diff --git a/gdb/testsuite/gdb.dap/cxx-exception.exp b/gdb/testsuite/gdb.dap/cxx-exception.exp index 284aef4..b54b11a 100644 --- a/gdb/testsuite/gdb.dap/cxx-exception.exp +++ b/gdb/testsuite/gdb.dap/cxx-exception.exp @@ -24,7 +24,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile {debug c++}] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -37,8 +37,11 @@ set bps [dict get [lindex $obj 0] body breakpoints] # breakpoints. gdb_assert {[llength $bps] == 3} "three breakpoints" -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at throw" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" 1 diff --git a/gdb/testsuite/gdb.dap/eof.exp b/gdb/testsuite/gdb.dap/eof.exp index 139c17a..9c17725 100644 --- a/gdb/testsuite/gdb.dap/eof.exp +++ b/gdb/testsuite/gdb.dap/eof.exp @@ -26,7 +26,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } diff --git a/gdb/testsuite/gdb.dap/frameless.exp b/gdb/testsuite/gdb.dap/frameless.exp index 9d25fc5..63ee521 100644 --- a/gdb/testsuite/gdb.dap/frameless.exp +++ b/gdb/testsuite/gdb.dap/frameless.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -36,9 +36,12 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [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_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} +dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $line_bpno diff --git a/gdb/testsuite/gdb.dap/hover.exp b/gdb/testsuite/gdb.dap/hover.exp index f7b9fd7..0c80650 100644 --- a/gdb/testsuite/gdb.dap/hover.exp +++ b/gdb/testsuite/gdb.dap/hover.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -36,7 +36,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/lazy-string.exp b/gdb/testsuite/gdb.dap/lazy-string.exp index 0249f14..5442220 100644 --- a/gdb/testsuite/gdb.dap/lazy-string.exp +++ b/gdb/testsuite/gdb.dap/lazy-string.exp @@ -31,7 +31,7 @@ set remote_python_file [gdb_remote_download host \ save_vars GDBFLAGS { append GDBFLAGS " -iex \"source $remote_python_file\"" - if {[dap_launch $testfile] == ""} { + if {[dap_initialize] == ""} { return } } @@ -43,8 +43,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $line_bpno diff --git a/gdb/testsuite/gdb.dap/log-message.exp b/gdb/testsuite/gdb.dap/log-message.exp index 4e3ecb7..e966b96 100644 --- a/gdb/testsuite/gdb.dap/log-message.exp +++ b/gdb/testsuite/gdb.dap/log-message.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -38,7 +38,11 @@ set obj [dap_check_request_and_response "set breakpoint" \ [list s $srcfile] $line]] set fn_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "logging output" output \ diff --git a/gdb/testsuite/gdb.dap/memory.exp b/gdb/testsuite/gdb.dap/memory.exp index 481ab62..2e911f4 100644 --- a/gdb/testsuite/gdb.dap/memory.exp +++ b/gdb/testsuite/gdb.dap/memory.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -36,7 +36,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/modules.exp b/gdb/testsuite/gdb.dap/modules.exp index 4d53b90..87cebda 100644 --- a/gdb/testsuite/gdb.dap/modules.exp +++ b/gdb/testsuite/gdb.dap/modules.exp @@ -38,7 +38,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile \ return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -47,8 +47,11 @@ set obj [dap_check_request_and_response "set breakpoint on stop function" \ {o breakpoints [a [o name [s stop]]]}] set fn_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $fn_bpno diff --git a/gdb/testsuite/gdb.dap/pause.exp b/gdb/testsuite/gdb.dap/pause.exp index e1e0d95..4d13dad 100644 --- a/gdb/testsuite/gdb.dap/pause.exp +++ b/gdb/testsuite/gdb.dap/pause.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -41,7 +41,11 @@ dap_check_request_and_response "set conditional breakpoint" \ condition [s "return_false()"]]]} \ [list s $srcfile] $line] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "process event generated" process \ "body startMethod" process dap_wait_for_event_and_check "inferior started" thread "body reason" started diff --git a/gdb/testsuite/gdb.dap/ptrref.exp b/gdb/testsuite/gdb.dap/ptrref.exp index bcdbc5b..0552c3b 100644 --- a/gdb/testsuite/gdb.dap/ptrref.exp +++ b/gdb/testsuite/gdb.dap/ptrref.exp @@ -23,7 +23,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile {debug c++}] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -34,7 +34,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/rust-slices.exp b/gdb/testsuite/gdb.dap/rust-slices.exp index 8a8c79c..c85568d 100644 --- a/gdb/testsuite/gdb.dap/rust-slices.exp +++ b/gdb/testsuite/gdb.dap/rust-slices.exp @@ -28,7 +28,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile {debug rust}] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -39,7 +39,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/scopes.exp b/gdb/testsuite/gdb.dap/scopes.exp index 0b0727c..aa3bb68 100644 --- a/gdb/testsuite/gdb.dap/scopes.exp +++ b/gdb/testsuite/gdb.dap/scopes.exp @@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } @@ -36,7 +36,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ diff --git a/gdb/testsuite/gdb.dap/sources.exp b/gdb/testsuite/gdb.dap/sources.exp index 670084e5..b606811 100644 --- a/gdb/testsuite/gdb.dap/sources.exp +++ b/gdb/testsuite/gdb.dap/sources.exp @@ -25,6 +25,10 @@ if {[build_executable ${testfile}.exp $testfile] == -1} { return } +if {[dap_initialize] == ""} { + return +} + if {[dap_launch $testfile stop_at_main 1] == ""} { return } diff --git a/gdb/testsuite/gdb.dap/stack-format.exp b/gdb/testsuite/gdb.dap/stack-format.exp index af9d6d0..b81183a 100644 --- a/gdb/testsuite/gdb.dap/stack-format.exp +++ b/gdb/testsuite/gdb.dap/stack-format.exp @@ -31,7 +31,7 @@ set remote_python_file [gdb_remote_download host \ save_vars GDBFLAGS { append GDBFLAGS " -iex \"source $remote_python_file\"" - if {[dap_launch $testfile] == ""} { + if {[dap_initialize] == ""} { return } } @@ -43,8 +43,11 @@ set obj [dap_check_request_and_response "set breakpoint by line number" \ [list s $srcfile] $line]] set line_bpno [dap_get_breakpoint_number $obj] -dap_check_request_and_response "start inferior" configurationDone +dap_check_request_and_response "configurationDone" configurationDone +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $line_bpno diff --git a/gdb/testsuite/gdb.dap/stop-at-main.exp b/gdb/testsuite/gdb.dap/stop-at-main.exp index f7eb9ac..4c3e57a 100644 --- a/gdb/testsuite/gdb.dap/stop-at-main.exp +++ b/gdb/testsuite/gdb.dap/stop-at-main.exp @@ -25,11 +25,15 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} { return } -if {[dap_launch $testfile stop_at_main 1] == ""} { +if {[dap_initialize] == ""} { return } dap_check_request_and_response "start inferior" configurationDone + +if {[dap_launch $testfile stop_at_main 1] == ""} { + return +} # We didn't explicitly set a breakpoint, so if we hit one, it worked. dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ "body reason" breakpoint diff --git a/gdb/testsuite/gdb.dap/terminate.exp b/gdb/testsuite/gdb.dap/terminate.exp index 9c37064..90d0194 100644 --- a/gdb/testsuite/gdb.dap/terminate.exp +++ b/gdb/testsuite/gdb.dap/terminate.exp @@ -27,11 +27,15 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} { return } -if {[dap_launch $testfile] == ""} { +if {[dap_initialize] == ""} { return } dap_check_request_and_response "start inferior" configurationDone + +if {[dap_launch $testfile] == ""} { + return +} dap_wait_for_event_and_check "inferior started" thread "body reason" started dap_wait_for_event_and_check "terminated event" terminated diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp index 0725986..979dfa2 100644 --- a/gdb/testsuite/lib/dap-support.exp +++ b/gdb/testsuite/lib/dap-support.exp @@ -235,10 +235,9 @@ proc dap_check_request_and_response {name command {obj {}}} { # Start gdb, send a DAP initialization request and return the # response. This approach lets the caller check the feature list, if -# desired. Callers not caring about this should probably use -# dap_launch. Returns the empty string on failure. NAME is used as -# the test name. -proc dap_initialize {name} { +# desired. Returns the empty string on failure. NAME is used as the +# test name. +proc dap_initialize {{name "initialize"}} { if {[dap_gdb_start]} { return "" } @@ -249,11 +248,12 @@ proc dap_initialize {name} { supportsMemoryReferences [l true]}] } -# Start gdb, send a DAP initialize request, and then a launch request -# specifying FILE as the program to use for the inferior. Returns the -# empty string on failure, or the response object from the launch -# request. If specified, ARGS is a dictionary of key-value pairs, -# each passed to the launch request. Valid keys are: +# Send a launch request specifying FILE as the program to use for the +# inferior. Returns the empty string on failure, or the response +# object from the launch request. If specified, ARGS is a dictionary +# of key-value pairs, each passed to the launch request. Valid keys +# are: +# # * arguments - value is a list of strings passed as command-line # arguments to the inferior # * env - value is a list of pairs of the form {VAR VALUE} that is @@ -266,9 +266,6 @@ proc dap_initialize {name} { # After this proc is called, gdb will be ready to accept breakpoint # requests. proc dap_launch {file {args {}}} { - if {[dap_initialize "startup - initialize"] == ""} { - return "" - } set params "o program" append params " [format {[%s]} [list s [standard_output_file $file]]]" |