@@ -187,7 +187,7 @@ def set_continue(self):
187
187
if not self .breaks :
188
188
# no breakpoints; run without debugger overhead
189
189
sys .settrace (None )
190
- frame = sys ._getframe (). f_back
190
+ frame = sys ._getframe (1 )
191
191
while frame :
192
192
del frame .f_trace
193
193
if frame is self .botframe :
@@ -216,34 +216,36 @@ def set_trace(self, frame=None, as_breakpoint=None, paused=True):
216
216
as_breakpoint = True
217
217
218
218
if frame is None :
219
- frame = thisframe = sys ._getframe ().f_back
220
- else :
221
- thisframe = frame
219
+ frame = sys ._getframe (1 )
220
+
222
221
# See pudb issue #52. If this works well enough we should upstream to
223
222
# stdlib bdb.py.
224
223
#self.reset()
225
224
226
- while frame :
227
- frame .f_trace = self .trace_dispatch
228
- self .botframe = frame
229
- frame = frame .f_back
230
-
231
- thisframe_info = (
232
- self .canonic (thisframe .f_code .co_filename ), thisframe .f_lineno )
233
- if thisframe_info not in self .set_traces or self .set_traces [thisframe_info ]:
234
- if as_breakpoint :
235
- self .set_traces [thisframe_info ] = True
236
- if self .ui .source_code_provider is not None :
237
- self .ui .set_source_code_provider (
238
- self .ui .source_code_provider , force_update = True )
239
-
240
- if paused :
241
- self .set_step ()
242
- else :
243
- self .set_continue ()
244
- sys .settrace (self .trace_dispatch )
245
- else :
246
- return
225
+ self .botframe = frame
226
+ self .botframe .f_trace = self .trace_dispatch
227
+ while self .botframe .f_back :
228
+ self .botframe = self .botframe .f_back
229
+ self .botframe .f_trace = self .trace_dispatch
230
+
231
+ stack , _ = self .get_stack (frame , None )
232
+ if stack :
233
+ thisframe , _ = stack [- 1 ]
234
+ thisframe_info = (
235
+ self .canonic (thisframe .f_code .co_filename ), thisframe .f_lineno )
236
+
237
+ if thisframe_info not in self .set_traces or self .set_traces [thisframe_info ]:
238
+ if as_breakpoint :
239
+ self .set_traces [thisframe_info ] = True
240
+ if self .ui .source_code_provider is not None :
241
+ self .ui .set_source_code_provider (
242
+ self .ui .source_code_provider , force_update = True )
243
+
244
+ if paused :
245
+ self .set_next (thisframe )
246
+ else :
247
+ self .set_continue ()
248
+ sys .settrace (self .trace_dispatch )
247
249
248
250
def save_breakpoints (self ):
249
251
from pudb .settings import save_breakpoints
@@ -313,13 +315,8 @@ def move_down_frame(self):
313
315
if self .curindex < len (self .stack )- 1 :
314
316
self .set_frame_index (self .curindex + 1 )
315
317
316
- def get_shortened_stack (self , frame , tb ):
317
- stack , index = self .get_stack (frame , tb )
318
-
319
- for i , (s_frame , lineno ) in enumerate (stack ):
320
- if s_frame is self .bottom_frame and index >= i :
321
- stack = stack [i :]
322
- index -= i
318
+ def get_stack (self , f , t ):
319
+ stack , index = bdb .Bdb .get_stack (self , f , t )
323
320
324
321
if CONFIG ['hide_importlib_frames' ]:
325
322
# see Python/import.c remove_importlib_frames function for more info
@@ -333,6 +330,16 @@ def get_shortened_stack(self, frame, tb):
333
330
334
331
return stack , index
335
332
333
+ def get_shortened_stack (self , frame , tb ):
334
+ stack , index = self .get_stack (frame , tb )
335
+
336
+ for i , (s_frame , lineno ) in enumerate (stack ):
337
+ if s_frame is self .bottom_frame and index >= i :
338
+ stack = stack [i :]
339
+ index -= i
340
+
341
+ return stack , index
342
+
336
343
def interaction (self , frame , exc_tuple = None , show_exc_dialog = True ):
337
344
if exc_tuple is None :
338
345
tb = None
0 commit comments