New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pdb.set_trace() clobbering traceback on error #60686
Comments
pdb.set_trace() is overwriting the actual traceback when exiting with an error. See minimal recreation here: https://gist.github.com/4079971 |
The top level frame line number is not updated because it has a local The following patch fixes the issue. The patch removes the local trace diff --git a/Lib/bdb.py b/Lib/bdb.py
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -64,6 +64,10 @@
if self.stop_here(frame) or self.break_here(frame):
self.user_line(frame)
if self.quitting: raise BdbQuit
+ # Do not re-install the local trace when we are finished debugging,
+ # see issues 16482 and 7238.
+ if not sys.gettrace():
+ return None
return self.trace_dispatch
def dispatch_call(self, frame, arg):
@@ -231,8 +235,10 @@
# no breakpoints; run without debugger overhead
sys.settrace(None)
frame = sys._getframe().f_back
- while frame and frame is not self.botframe:
+ while frame:
del frame.f_trace
+ if frame is self.botframe:
+ break
frame = frame.f_back
def set_quit(self): The following code is a minimum implementation of pdb with the patch class Bdb:
def trace_dispatch(self, frame, event, arg):
self.set_continue()
if sys.gettrace():
return self.trace_dispatch
def set_trace(self, frame):
self.botframe = frame
frame.f_trace = self.trace_dispatch
sys.settrace(self.trace_dispatch)
def set_continue(self):
sys.settrace(None)
del self.botframe.f_trace
frame = sys._getframe()
d = Bdb()
d.set_trace(frame)
y = "line of code not triggering an error"
x = 1
assert x != 1 |
See also how it is fixed at |
See also bpo-17697. Xavier, would you be willing to submit a patch with a test? |
The last patch proposed at bpo-17277 and named traced_frame.patch |
Forgot to say that traced_frame.patch includes a test. |
I've just hit this. Is there anything I can do to help get this fixed?` |
Just for reference: #6233 is about fixing this. |
I too just hit this issue with pdb and checked out the PR locally. It works fine though it has merge conflicts with latest master. I am adding 3.8, 3.7 and 3.6 removing the older versions that don't support bug fixes. Since the PR has unknown repository I suppose @xdegaye has deleted their fork and I don't know if the PR can be revived without opening a new one. I have merged the latest master in my own fork resolving conflicts in case a new PR has to be generated : master...tirkarthi:[pr-6233](https://github.com/python/cpython/pull/6233)-latest. Adding Serhiy to the issue. The PR also solves many linked issues in the PR and I thought to add the update here since it seemed appropriate. Thanks much @xdegaye for the PR |
You can download the branch for a pull request even if the repo is deleted using this https://stackoverflow.com/a/28622034/161801. That will let you keep the original commits intact. |
iritkatriel@Irits-MBP cpython % cat pdb_traceback.py import pdb
x = 0
while True:
pdb.set_trace()
y = "line of code not triggering an error"
x += 1
assert x != 3
iritkatriel@Irits-MBP cpython % cat pdb_traceback.py
import pdb
x = 0
while True:
pdb.set_trace()
y = "line of code not triggering an error"
x += 1
assert x != 3
iritkatriel@Irits-MBP cpython % ./python.exe pdb_traceback.py
> /Users/iritkatriel/src/cpython/pdb_traceback.py(8)<module>()
-> y = "line of code not triggering an error"
(Pdb) c
> /Users/iritkatriel/src/cpython/pdb_traceback.py(8)<module>()
-> y = "line of code not triggering an error"
(Pdb) c
> /Users/iritkatriel/src/cpython/pdb_traceback.py(8)<module>()
-> y = "line of code not triggering an error"
(Pdb) c
Traceback (most recent call last):
File "/Users/iritkatriel/src/cpython/pdb_traceback.py", line 10, in <module>
assert x != 3
^^^^^^^^^^^^^
AssertionError |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: