Skip to content

Commit bee3890

Browse files
committed
keep track of verified breakpoints in tests
1 parent 3b9659b commit bee3890

File tree

3 files changed

+40
-35
lines changed

3 files changed

+40
-35
lines changed

lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ def __init__(
136136
self.initialized = False
137137
self.frame_scopes = {}
138138
self.init_commands = init_commands
139+
self.resolved_breakpoints = set([])
139140

140141
@classmethod
141142
def encode_content(cls, s: str) -> bytes:
@@ -279,6 +280,14 @@ def _process_continued(self, all_threads_continued: bool):
279280
if all_threads_continued:
280281
self.thread_stop_reasons = {}
281282

283+
def _update_verified_breakpoints(self, breakpoints):
284+
for breakpoint in breakpoints:
285+
if "verified" in breakpoint:
286+
if breakpoint["verified"]:
287+
self.resolved_breakpoints.add(str(breakpoint["id"]))
288+
else:
289+
self.resolved_breakpoints.discard(str(breakpoint["id"]))
290+
282291
def send_packet(self, command_dict: Request, set_sequence=True):
283292
"""Take the "command_dict" python dictionary and encode it as a JSON
284293
string and send the contents as a packet to the VSCode debug
@@ -422,8 +431,27 @@ def wait_for_breakpoint_events(self, timeout: Optional[float] = None):
422431
if not event:
423432
break
424433
breakpoint_events.append(event)
434+
435+
self._update_verified_breakpoints(
436+
[event["body"]["breakpoint"] for event in breakpoint_events]
437+
)
425438
return breakpoint_events
426439

440+
def wait_for_breakpoints_to_be_verified(
441+
self, breakpoint_ids: list[str], timeout: Optional[float] = None
442+
):
443+
"""Wait for all breakpoints to be verified. Return all unverified breakpoints."""
444+
unresolved_breakpoints = set(breakpoint_ids)
445+
unresolved_breakpoints -= self.resolved_breakpoints
446+
while len(unresolved_breakpoints) > 0:
447+
breakpoint_event = self.wait_for_event("breakpoint", timeout=timeout)
448+
if breakpoint_event is None:
449+
break
450+
451+
self._update_verified_breakpoints([breakpoint_event["body"]["breakpoint"]])
452+
unresolved_breakpoints -= self.resolved_breakpoints
453+
return unresolved_breakpoints
454+
427455
def wait_for_exited(self, timeout: Optional[float] = None):
428456
event_dict = self.wait_for_event("exited", timeout=timeout)
429457
if event_dict is None:
@@ -985,7 +1013,10 @@ def request_setBreakpoints(self, file_path, line_array, data=None):
9851013
"type": "request",
9861014
"arguments": args_dict,
9871015
}
988-
return self.send_recv(command_dict)
1016+
response = self.send_recv(command_dict)
1017+
breakpoints = response["body"]["breakpoints"]
1018+
self._update_verified_breakpoints(breakpoints)
1019+
return response
9891020

9901021
def request_setExceptionBreakpoints(self, filters):
9911022
args_dict = {"filters": filters}
@@ -1188,17 +1219,15 @@ def request_locations(self, locationReference):
11881219
}
11891220
return self.send_recv(command_dict)
11901221

1191-
def request_testGetTargetBreakpoints(self, only_resolved=False):
1222+
def request_testGetTargetBreakpoints(self):
11921223
"""A request packet used in the LLDB test suite to get all currently
11931224
set breakpoint infos for all breakpoints currently set in the
11941225
target.
11951226
"""
11961227
command_dict = {
11971228
"command": "_testGetTargetBreakpoints",
11981229
"type": "request",
1199-
"arguments": {
1200-
"onlyResolved": only_resolved,
1201-
},
1230+
"arguments": {},
12021231
}
12031232
return self.send_recv(command_dict)
12041233

lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -89,29 +89,11 @@ def set_function_breakpoints(
8989
return breakpoint_ids
9090

9191
def wait_for_breakpoints_to_resolve(
92-
self, breakpoint_ids: list[str], timeout: Optional[float] = None
92+
self, breakpoint_ids: list[str], timeout: Optional[float] = DEFAULT_TIMEOUT
9393
):
94-
unresolved_breakpoints = set(breakpoint_ids)
95-
96-
# Check already resolved breakpoints
97-
resolved_breakpoints = self.dap_server.request_testGetTargetBreakpoints(
98-
only_resolved=True
99-
)["body"]["breakpoints"]
100-
for resolved_breakpoint in resolved_breakpoints:
101-
unresolved_breakpoints.discard(str(resolved_breakpoint["id"]))
102-
103-
while len(unresolved_breakpoints) > 0:
104-
breakpoint_event = self.dap_server.wait_for_event(
105-
"breakpoint", timeout=timeout
106-
)
107-
if breakpoint_event is None:
108-
break
109-
110-
if breakpoint_event["body"]["reason"] in ["changed", "new"]:
111-
unresolved_breakpoints.discard(
112-
str(breakpoint_event["body"]["breakpoint"]["id"])
113-
)
114-
94+
unresolved_breakpoints = self.dap_server.wait_for_breakpoints_to_be_verified(
95+
breakpoint_ids, timeout
96+
)
11597
self.assertEqual(
11698
len(unresolved_breakpoints),
11799
0,

lldb/tools/lldb-dap/Handler/TestGetTargetBreakpointsRequestHandler.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,12 @@ namespace lldb_dap {
1515

1616
void TestGetTargetBreakpointsRequestHandler::operator()(
1717
const llvm::json::Object &request) const {
18-
const auto *arguments = request.getObject("arguments");
19-
bool only_resolved = GetBoolean(arguments, "onlyResolved").value_or(false);
20-
2118
llvm::json::Object response;
2219
FillResponse(request, response);
2320
llvm::json::Array response_breakpoints;
2421
for (uint32_t i = 0; dap.target.GetBreakpointAtIndex(i).IsValid(); ++i) {
25-
const auto target_bp = dap.target.GetBreakpointAtIndex(i);
26-
if (!only_resolved || target_bp.GetNumResolvedLocations() > 0) {
27-
auto bp = Breakpoint(dap, target_bp);
28-
response_breakpoints.push_back(bp.ToProtocolBreakpoint());
29-
}
22+
auto bp = Breakpoint(dap, dap.target.GetBreakpointAtIndex(i));
23+
response_breakpoints.push_back(bp.ToProtocolBreakpoint());
3024
}
3125
llvm::json::Object body;
3226
body.try_emplace("breakpoints", std::move(response_breakpoints));

0 commit comments

Comments
 (0)