@@ -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
0 commit comments