Skip to content

Commit 084d6dc

Browse files
gh-120144: Refactor bdb monitoring backend to match settrace behavior (#132484)
1 parent 2666a06 commit 084d6dc

File tree

1 file changed

+12
-23
lines changed

1 file changed

+12
-23
lines changed

Diff for: Lib/bdb.py

+12-23
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ def start_trace(self, tracefunc):
6262
sys.monitoring.register_callback(self._tool_id, event, callback)
6363
if event != E.INSTRUCTION:
6464
all_events |= event
65-
self.check_trace_func()
66-
self.check_trace_opcodes()
65+
self.update_local_events()
6766
sys.monitoring.set_events(self._tool_id, self.GLOBAL_EVENTS)
6867
self._enabled = True
6968

@@ -74,7 +73,6 @@ def stop_trace(self):
7473
if curr_tool != self._name:
7574
return
7675
sys.monitoring.clear_tool_id(self._tool_id)
77-
self.check_trace_opcodes()
7876
sys.monitoring.free_tool_id(self._tool_id)
7977

8078
def disable_current_event(self):
@@ -95,7 +93,7 @@ def wrapper(self, *args):
9593
frame = sys._getframe().f_back
9694
ret = func(self, frame, *args)
9795
if self._enabled and frame.f_trace:
98-
self.check_trace_func()
96+
self.update_local_events()
9997
if self._disable_current_event:
10098
return sys.monitoring.DISABLE
10199
else:
@@ -159,27 +157,18 @@ def opcode_callback(self, frame, code, offset):
159157
if frame.f_trace and frame.f_trace_opcodes:
160158
frame.f_trace(frame, 'opcode', None)
161159

162-
def check_trace_opcodes(self, frame=None):
163-
if frame is None:
164-
frame = sys._getframe().f_back
165-
while frame is not None:
166-
self.set_trace_opcodes(frame, frame.f_trace_opcodes)
167-
frame = frame.f_back
168-
169-
def set_trace_opcodes(self, frame, trace_opcodes):
160+
def update_local_events(self, frame=None):
170161
if sys.monitoring.get_tool(self._tool_id) != self._name:
171162
return
172-
if trace_opcodes:
173-
sys.monitoring.set_local_events(self._tool_id, frame.f_code, E.INSTRUCTION)
174-
else:
175-
sys.monitoring.set_local_events(self._tool_id, frame.f_code, 0)
176-
177-
def check_trace_func(self, frame=None):
178163
if frame is None:
179164
frame = sys._getframe().f_back
180165
while frame is not None:
181166
if frame.f_trace is not None:
182-
sys.monitoring.set_local_events(self._tool_id, frame.f_code, self.LOCAL_EVENTS)
167+
if frame.f_trace_opcodes:
168+
events = self.LOCAL_EVENTS | E.INSTRUCTION
169+
else:
170+
events = self.LOCAL_EVENTS
171+
sys.monitoring.set_local_events(self._tool_id, frame.f_code, events)
183172
frame = frame.f_back
184173

185174
def _get_lineno(self, code, offset):
@@ -544,11 +533,11 @@ def _set_trace_opcodes(self, trace_opcodes):
544533
frame = self.enterframe
545534
while frame is not None:
546535
frame.f_trace_opcodes = trace_opcodes
547-
if self.monitoring_tracer:
548-
self.monitoring_tracer.set_trace_opcodes(frame, trace_opcodes)
549536
if frame is self.botframe:
550537
break
551538
frame = frame.f_back
539+
if self.monitoring_tracer:
540+
self.monitoring_tracer.update_local_events()
552541

553542
def _set_stopinfo(self, stopframe, returnframe, stoplineno=0, opcode=False):
554543
"""Set the attributes for stopping.
@@ -642,8 +631,8 @@ def set_continue(self):
642631
frame = frame.f_back
643632
for frame, (trace_lines, trace_opcodes) in self.frame_trace_lines_opcodes.items():
644633
frame.f_trace_lines, frame.f_trace_opcodes = trace_lines, trace_opcodes
645-
if self.backend == 'monitoring':
646-
self.monitoring_tracer.set_trace_opcodes(frame, trace_opcodes)
634+
if self.backend == 'monitoring':
635+
self.monitoring_tracer.update_local_events()
647636
self.frame_trace_lines_opcodes = {}
648637

649638
def set_quit(self):

0 commit comments

Comments
 (0)