Repository navigation
pdb commands may try to access non-existing frames #138641
Copy link
Copy link
Closed
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
➜ cpython git:(main) ./python.exe
Python 3.15.0a0 (heads/main:919c7e806e, Sep 8 2025, 17:24:03) [Clang 17.0.0 (clang-1700.0.13.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> breakpoint()
> <python-input-0>(1)<module>()
(Pdb) breakpoint()
(Pdb) ll
Traceback (most recent call last):
File "<python-input-0>", line 1, in <module>
breakpoint()
~~~~~~~~~~^^
File "/Users/hyi/prs/cpython/Lib/bdb.py", line 94, in wrapper
ret = func(frame, *args)
File "/Users/hyi/prs/cpython/Lib/bdb.py", line 154, in opcode_callback
frame.f_trace(frame, 'opcode', None)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/hyi/prs/cpython/Lib/bdb.py", line 289, in trace_dispatch
return self.dispatch_opcode(frame, arg)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/hyi/prs/cpython/Lib/bdb.py", line 406, in dispatch_opcode
self.user_opcode(frame)
~~~~~~~~~~~~~~~~^^^^^^^
File "/Users/hyi/prs/cpython/Lib/pdb.py", line 547, in user_line
self.interaction(frame, None)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/Users/hyi/prs/cpython/Lib/pdb.py", line 736, in interaction
self._cmdloop()
~~~~~~~~~~~~~^^
File "/Users/hyi/prs/cpython/Lib/pdb.py", line 601, in _cmdloop
self.cmdloop()
~~~~~~~~~~~~^^
File "/Users/hyi/prs/cpython/Lib/cmd.py", line 149, in cmdloop
stop = self.onecmd(line)
File "/Users/hyi/prs/cpython/Lib/pdb.py", line 1038, in onecmd
return cmd.Cmd.onecmd(self, line)
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/hyi/prs/cpython/Lib/cmd.py", line 227, in onecmd
return func(arg)
File "/Users/hyi/prs/cpython/Lib/pdb.py", line 2156, in do_longlist
filename = self.curframe.f_code.co_filename
^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'f_code'
>>>
CPython versions tested on:
3.15, CPython main branch
Operating systems tested on:
Other
Linked PRs
- gh-138641: prevent accessing non-existing
curframein pdb commands #138642 - gh-138641: Ignore set_trace() when we are already in pdb #159918
- [3.15] gh-138641: Ignore set_trace() when we are already in pdb (GH-159918) #159970
- [3.14] gh-138641: Ignore set_trace() when we are already in pdb (GH-159918) #159971
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Activity
yihong0618 commentedon Sep 8, 2025
I am not sure it needs to fix, so will draft a patch
picnixz commentedon Sep 8, 2025
It's not a crash but it's an annoying situation as the error message is really not needed. So yes a fix is needed.
[-]breakpoint() in pdb will cause error[/-][+]`pdb` commands may try to access non-existing frames[/+]gaogaotiantian commentedon Sep 8, 2025
I think we are fixing the wrong thing. So this behavior should not happen, but checking
self.curframeis not the way to fix it.self.curframeshould always exist. The thing we should fix is how we treatbreakpoint()in a breakpoint.yihong0618 commentedon Sep 8, 2025
copy that, will try to learn that way, thank you
ChenyangLi4288 commentedon Oct 14, 2025
Thank you! @gaogaotiantian I am thinking several ways to fix it. One is to make breakpoint() a no-op in pdb context - Detect when we're already in a debugger and just return immediately. Or simply don't trigger the opcode callback mechanism for the breakpoint() builtin when already debugging.
The other way is to ensure that nested debugger calls properly maintain frame context.
What do you think?
gh-138641: Ignore set_trace() when we are already in pdb (#159918)
gaogaotiantian commentedon Oct 20, 2026
Fixed in #159918
[3.14] gh-138641: Ignore set_trace() when we are already in pdb (GH-1…
[3.15] gh-138641: Ignore set_trace() when we are already in pdb (GH-1…