Skip to content

Commit

Permalink
Fixed py3 behaviour when trace set via import pudb.b
Browse files Browse the repository at this point in the history
  • Loading branch information
wronglink committed Apr 13, 2017
1 parent c1df0e3 commit 7518a93
Showing 1 changed file with 39 additions and 32 deletions.
71 changes: 39 additions & 32 deletions pudb/debugger.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def set_continue(self):
if not self.breaks:
# no breakpoints; run without debugger overhead
sys.settrace(None)
frame = sys._getframe().f_back
frame = sys._getframe(1)
while frame:
del frame.f_trace
if frame is self.botframe:
Expand Down Expand Up @@ -216,34 +216,36 @@ def set_trace(self, frame=None, as_breakpoint=None, paused=True):
as_breakpoint = True

if frame is None:
frame = thisframe = sys._getframe().f_back
else:
thisframe = frame
frame = sys._getframe(1)

# See pudb issue #52. If this works well enough we should upstream to
# stdlib bdb.py.
#self.reset()

while frame:
frame.f_trace = self.trace_dispatch
self.botframe = frame
frame = frame.f_back

thisframe_info = (
self.canonic(thisframe.f_code.co_filename), thisframe.f_lineno)
if thisframe_info not in self.set_traces or self.set_traces[thisframe_info]:
if as_breakpoint:
self.set_traces[thisframe_info] = True
if self.ui.source_code_provider is not None:
self.ui.set_source_code_provider(
self.ui.source_code_provider, force_update=True)

if paused:
self.set_step()
else:
self.set_continue()
sys.settrace(self.trace_dispatch)
else:
return
self.botframe = frame
self.botframe.f_trace = self.trace_dispatch
while self.botframe.f_back:
self.botframe = self.botframe.f_back
self.botframe.f_trace = self.trace_dispatch

stack, _ = self.get_stack(frame, None)
if stack:
thisframe, _ = stack[-1]
thisframe_info = (
self.canonic(thisframe.f_code.co_filename), thisframe.f_lineno)

if thisframe_info not in self.set_traces or self.set_traces[thisframe_info]:
if as_breakpoint:
self.set_traces[thisframe_info] = True
if self.ui.source_code_provider is not None:
self.ui.set_source_code_provider(
self.ui.source_code_provider, force_update=True)

if paused:
self.set_next(thisframe)
else:
self.set_continue()
sys.settrace(self.trace_dispatch)

def save_breakpoints(self):
from pudb.settings import save_breakpoints
Expand Down Expand Up @@ -313,13 +315,8 @@ def move_down_frame(self):
if self.curindex < len(self.stack)-1:
self.set_frame_index(self.curindex+1)

def get_shortened_stack(self, frame, tb):
stack, index = self.get_stack(frame, tb)

for i, (s_frame, lineno) in enumerate(stack):
if s_frame is self.bottom_frame and index >= i:
stack = stack[i:]
index -= i
def get_stack(self, f, t):
stack, index = bdb.Bdb.get_stack(self, f, t)

if CONFIG['hide_importlib_frames']:
# see Python/import.c remove_importlib_frames function for more info
Expand All @@ -333,6 +330,16 @@ def get_shortened_stack(self, frame, tb):

return stack, index

def get_shortened_stack(self, frame, tb):
stack, index = self.get_stack(frame, tb)

for i, (s_frame, lineno) in enumerate(stack):
if s_frame is self.bottom_frame and index >= i:
stack = stack[i:]
index -= i

return stack, index

def interaction(self, frame, exc_tuple=None, show_exc_dialog=True):
if exc_tuple is None:
tb = None
Expand Down

0 comments on commit 7518a93

Please sign in to comment.