Closed 6c53f22f-246d-4255-aab6-e377bdeb50f4 closed 4 years ago
When a decorater contains a lambda
declaration, using the pdb command longlist
will show only the definition of the decorator. The definition of the function itself is not shown:
cat mini.py
def foo(x, y=None):
return x
@foo(foo, lambda a:a) def spam(): 0+0 1+1 1/0
spam()
$ python3.4 -mpdb mini.py
> /tmp/mini.py(3)<module>()
-> def foo(x, y=None):
(Pdb) cont
Traceback (most recent call last):
File "/usr/lib64/python3.4/pdb.py", line 1661, in main
pdb._runscript(mainpyfile)
File "/usr/lib64/python3.4/pdb.py", line 1542, in _runscript
self.run(statement)
File "/usr/lib64/python3.4/bdb.py", line 431, in run
exec(cmd, globals, locals)
File "<string>", line 1, in <module>
File "/tmp/mini.py", line 3, in <module>
def foo(x, y=None):
File "/tmp/mini.py", line 10, in spam
1/0
ZeroDivisionError: division by zero
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> /tmp/mini.py(10)spam()
-> 1/0
(Pdb) longlist
6 @foo(foo, lambda a:a)
(Pdb)
The last line illustrates the problem. longlist
should show the definition of spam
, not just the decorator.
I think this has been fixed by now, because I don't see the problem in Python 3.10:
python.bat -mpdb tmp1.py
Running Release|Win32 interpreter...
> c:\users\user\src\cpython\tmp1.py(2)<module>()
-> def foo(x, y=None):
(Pdb) c
Traceback (most recent call last):
File "C:\Users\User\src\cpython\lib\pdb.py", line 1740, in main
pdb._runscript(mainpyfile)
File "C:\Users\User\src\cpython\lib\pdb.py", line 1609, in _runscript
self.run(statement)
File "C:\Users\User\src\cpython\lib\bdb.py", line 580, in run
exec(cmd, globals, locals)
File "<string>", line 1, in <module>
File "c:\users\user\src\cpython\tmp1.py", line 2, in <module>
def foo(x, y=None):
File "c:\users\user\src\cpython\tmp1.py", line 9, in spam
1/0
ZeroDivisionError: division by zero
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> c:\users\user\src\cpython\tmp1.py(9)spam()
-> 1/0
(Pdb) longlist
5 @foo(foo, lambda a:a)
6 def spam():
7 0+0
8 1+1
9 -> 1/0
(Pdb)
pdb uses inspect.findsource for this, where this problem was fixed in bpo-1764286.
I believe this ticket can be closed.
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: ```python assignee = None closed_at =
created_at =
labels = ['type-bug', 'library']
title = "pdb's `longlist` shows only decorator if that one contains a lambda"
updated_at =
user = 'https://github.com/gerritholl'
```
bugs.python.org fields:
```python
activity =
actor = 'pablogsal'
assignee = 'none'
closed = True
closed_date =
closer = 'pablogsal'
components = ['Library (Lib)']
creation =
creator = 'Gerrit.Holl'
dependencies = []
files = []
hgrepos = []
issue_num = 23832
keywords = []
message_count = 3.0
messages = ['239749', '375776', '375798']
nosy_count = 3.0
nosy_names = ['Gerrit.Holl', 'pablogsal', 'iritkatriel']
pr_nums = []
priority = 'normal'
resolution = 'out of date'
stage = 'resolved'
status = 'closed'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue23832'
versions = ['Python 3.4']
```