diff options
-rw-r--r-- | gdb/python/lib/gdb/dap/breakpoint.py | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dap/basic-dap.exp | 9 |
2 files changed, 14 insertions, 3 deletions
diff --git a/gdb/python/lib/gdb/dap/breakpoint.py b/gdb/python/lib/gdb/dap/breakpoint.py index 76ff129..1622ae6 100644 --- a/gdb/python/lib/gdb/dap/breakpoint.py +++ b/gdb/python/lib/gdb/dap/breakpoint.py @@ -273,7 +273,13 @@ def set_breakpoint(*, source, breakpoints: Sequence = (), **args): if "path" not in source: result = [] else: - specs = [_rewrite_src_breakpoint(source=source, **bp) for bp in breakpoints] + # Setting 'source' in BP avoids any Python error if BP already + # has a 'source' parameter. Setting this isn't in the spec, + # but it is better to be safe. See PR dap/30820. + specs = [] + for bp in breakpoints: + bp["source"] = source + specs.append(_rewrite_src_breakpoint(**bp)) # Be sure to include the path in the key, so that we only # clear out breakpoints coming from this same source. key = "source:" + source["path"] diff --git a/gdb/testsuite/gdb.dap/basic-dap.exp b/gdb/testsuite/gdb.dap/basic-dap.exp index 7dfc759..98ca739 100644 --- a/gdb/testsuite/gdb.dap/basic-dap.exp +++ b/gdb/testsuite/gdb.dap/basic-dap.exp @@ -87,10 +87,15 @@ foreach entry [dict get [lindex $obj 0] body breakpoints] { 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. set obj [dap_check_request_and_response "reset breakpoint by line number" \ setBreakpoints \ - [format {o source [o path [%s]] breakpoints [a [o line [i %d]]]} \ - [list s $srcfile] $line]] + [format {o source [o path [%s]] \ + breakpoints [a [o source [o path [%s]] \ + line [i %d]]]} \ + [list s $srcfile] [list s $srcfile] $line]] set new_line_bpno [dap_get_breakpoint_number $obj] gdb_assert {$new_line_bpno == $line_bpno} "re-setting kept same breakpoint number" |