@@ -252,29 +252,41 @@ def set_trace(self, frame=None, as_breakpoint=None, paused=True):
252
252
as_breakpoint = True
253
253
254
254
if frame is None :
255
- frame = thisframe = sys ._getframe ().f_back
256
- else :
257
- thisframe = frame
255
+ frame = sys ._getframe ().f_back
256
+ assert frame is not None
257
+
258
258
# See pudb issue #52. If this works well enough we should upstream to
259
259
# stdlib bdb.py.
260
260
# self.reset()
261
261
262
- while frame :
263
- frame .f_trace = self .trace_dispatch
264
- self .botframe = frame
265
- frame = frame .f_back
262
+ if paused :
263
+ self .enterframe = frame
266
264
267
- thisframe_info = (
268
- self .canonic (thisframe .f_code .co_filename ), thisframe .f_lineno )
269
- if thisframe_info not in self .set_traces or self .set_traces [thisframe_info ]:
265
+ thisframe = frame
266
+ while thisframe :
267
+ thisframe .f_trace = self .trace_dispatch
268
+ self .botframe = thisframe
269
+ if sys .version_info >= (3 , 13 ):
270
+ # save trace flags, to be restored by set_continue
271
+ self .frame_trace_lines_opcodes [thisframe ] = ( # pylint: disable=no-member
272
+ thisframe .f_trace_lines ,
273
+ thisframe .f_trace_opcodes )
274
+
275
+ # We need f_trace_lines == True for the debugger to work
276
+ thisframe .f_trace_lines = True
277
+
278
+ thisframe = thisframe .f_back
279
+
280
+ frame_info = (self .canonic (frame .f_code .co_filename ), frame .f_lineno )
281
+ if frame_info not in self .set_traces or self .set_traces [frame_info ]:
270
282
if as_breakpoint :
271
- self .set_traces [thisframe_info ] = True
283
+ self .set_traces [frame_info ] = True
272
284
if self .ui .source_code_provider is not None :
273
285
self .ui .set_source_code_provider (
274
286
self .ui .source_code_provider , force_update = True )
275
287
276
288
if paused :
277
- self .set_step ( )
289
+ self ._set_stopinfo ( frame , None )
278
290
else :
279
291
self .set_continue ()
280
292
sys .settrace (self .trace_dispatch )
0 commit comments