import os
import re
+from contextlib import contextmanager
+
# These are deprecated in 3.9, but required in older versions.
from typing import Optional, Sequence
)
+# True when suppressing new breakpoint events.
+_suppress_bp = False
+
+
+@contextmanager
+def suppress_new_breakpoint_event():
+ """Return a new context manager that suppresses new breakpoint events."""
+ global _suppress_bp
+ _suppress_bp = True
+ try:
+ yield None
+ finally:
+ _suppress_bp = False
+
+
@in_gdb_thread
def _bp_created(event):
- send_event(
- "breakpoint",
- {
- "reason": "new",
- "breakpoint": _breakpoint_descriptor(event),
- },
- )
+ global _suppress_bp
+ if not _suppress_bp:
+ send_event(
+ "breakpoint",
+ {
+ "reason": "new",
+ "breakpoint": _breakpoint_descriptor(event),
+ },
+ )
@in_gdb_thread
if keyspec in saved_map:
bp = saved_map.pop(keyspec)
else:
- bp = creator(**spec)
+ with suppress_new_breakpoint_event():
+ bp = creator(**spec)
bp.condition = condition
if hit_condition is None:
set line_bpno [dap_get_breakpoint_number $obj]
# Check the new breakpoint event.
-set ok 0
+set ok 1
foreach d [lindex $obj 1] {
if {[dict get $d type] != "event"
|| [dict get $d event] != "breakpoint"} {
}
if {[dict get $d body reason] == "new"
&& [dict get $d body breakpoint verified] == "true"} {
- set ok 1
- pass "check new breakpoint event"
+ set ok 0
break
}
}
-if {!$ok} {
- fail "check new breakpoint event"
+if {$ok} {
+ pass "check lack of new breakpoint event"
+} else {
+ fail "check lack of new breakpoint event"
}
# Check that there are breakpoint locations on each line between FIRST