https://github.com/python/cpython/commit/084d6dc122c761b90cba620eac2f25dc1660b7f1 commit: 084d6dc122c761b90cba620eac2f25dc1660b7f1 branch: main author: Tian Gao <gaogaotiant...@hotmail.com> committer: gaogaotiantian <gaogaotiant...@hotmail.com> date: 2025-04-13T17:49:35-04:00 summary:
gh-120144: Refactor bdb monitoring backend to match settrace behavior (#132484) files: M Lib/bdb.py diff --git a/Lib/bdb.py b/Lib/bdb.py index ba5cacc2a54cbc..17f79aee41fdef 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -62,8 +62,7 @@ def start_trace(self, tracefunc): sys.monitoring.register_callback(self._tool_id, event, callback) if event != E.INSTRUCTION: all_events |= event - self.check_trace_func() - self.check_trace_opcodes() + self.update_local_events() sys.monitoring.set_events(self._tool_id, self.GLOBAL_EVENTS) self._enabled = True @@ -74,7 +73,6 @@ def stop_trace(self): if curr_tool != self._name: return sys.monitoring.clear_tool_id(self._tool_id) - self.check_trace_opcodes() sys.monitoring.free_tool_id(self._tool_id) def disable_current_event(self): @@ -95,7 +93,7 @@ def wrapper(self, *args): frame = sys._getframe().f_back ret = func(self, frame, *args) if self._enabled and frame.f_trace: - self.check_trace_func() + self.update_local_events() if self._disable_current_event: return sys.monitoring.DISABLE else: @@ -159,27 +157,18 @@ def opcode_callback(self, frame, code, offset): if frame.f_trace and frame.f_trace_opcodes: frame.f_trace(frame, 'opcode', None) - def check_trace_opcodes(self, frame=None): - if frame is None: - frame = sys._getframe().f_back - while frame is not None: - self.set_trace_opcodes(frame, frame.f_trace_opcodes) - frame = frame.f_back - - def set_trace_opcodes(self, frame, trace_opcodes): + def update_local_events(self, frame=None): if sys.monitoring.get_tool(self._tool_id) != self._name: return - if trace_opcodes: - sys.monitoring.set_local_events(self._tool_id, frame.f_code, E.INSTRUCTION) - else: - sys.monitoring.set_local_events(self._tool_id, frame.f_code, 0) - - def check_trace_func(self, frame=None): if frame is None: frame = sys._getframe().f_back while frame is not None: if frame.f_trace is not None: - sys.monitoring.set_local_events(self._tool_id, frame.f_code, self.LOCAL_EVENTS) + if frame.f_trace_opcodes: + events = self.LOCAL_EVENTS | E.INSTRUCTION + else: + events = self.LOCAL_EVENTS + sys.monitoring.set_local_events(self._tool_id, frame.f_code, events) frame = frame.f_back def _get_lineno(self, code, offset): @@ -544,11 +533,11 @@ def _set_trace_opcodes(self, trace_opcodes): frame = self.enterframe while frame is not None: frame.f_trace_opcodes = trace_opcodes - if self.monitoring_tracer: - self.monitoring_tracer.set_trace_opcodes(frame, trace_opcodes) if frame is self.botframe: break frame = frame.f_back + if self.monitoring_tracer: + self.monitoring_tracer.update_local_events() def _set_stopinfo(self, stopframe, returnframe, stoplineno=0, opcode=False): """Set the attributes for stopping. @@ -642,8 +631,8 @@ def set_continue(self): frame = frame.f_back for frame, (trace_lines, trace_opcodes) in self.frame_trace_lines_opcodes.items(): frame.f_trace_lines, frame.f_trace_opcodes = trace_lines, trace_opcodes - if self.backend == 'monitoring': - self.monitoring_tracer.set_trace_opcodes(frame, trace_opcodes) + if self.backend == 'monitoring': + self.monitoring_tracer.update_local_events() self.frame_trace_lines_opcodes = {} def set_quit(self): _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com