bpo-41609: Fix output of pdb's whatis command for instance methods (GH-21935) (#21977)
(cherry picked from commit 022bc7572f
)
Co-authored-by: Irit Katriel <iritkatriel@yahoo.com>
This commit is contained in:
parent
211e4c6e9c
commit
7361451b97
16
Lib/pdb.py
16
Lib/pdb.py
|
@ -1312,14 +1312,6 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
# _getval() already printed the error
|
||||
return
|
||||
code = None
|
||||
# Is it a function?
|
||||
try:
|
||||
code = value.__code__
|
||||
except Exception:
|
||||
pass
|
||||
if code:
|
||||
self.message('Function %s' % code.co_name)
|
||||
return
|
||||
# Is it an instance method?
|
||||
try:
|
||||
code = value.__func__.__code__
|
||||
|
@ -1328,6 +1320,14 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
if code:
|
||||
self.message('Method %s' % code.co_name)
|
||||
return
|
||||
# Is it a function?
|
||||
try:
|
||||
code = value.__code__
|
||||
except Exception:
|
||||
pass
|
||||
if code:
|
||||
self.message('Function %s' % code.co_name)
|
||||
return
|
||||
# Is it a class?
|
||||
if value.__class__ is type:
|
||||
self.message('Class %s.%s' % (value.__module__, value.__qualname__))
|
||||
|
|
|
@ -425,6 +425,47 @@ def test_list_commands():
|
|||
(Pdb) continue
|
||||
"""
|
||||
|
||||
def test_pdb_whatis_command():
|
||||
"""Test the whatis command
|
||||
|
||||
>>> myvar = (1,2)
|
||||
>>> def myfunc():
|
||||
... pass
|
||||
|
||||
>>> class MyClass:
|
||||
... def mymethod(self):
|
||||
... pass
|
||||
|
||||
>>> def test_function():
|
||||
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
|
||||
|
||||
>>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
|
||||
... 'whatis myvar',
|
||||
... 'whatis myfunc',
|
||||
... 'whatis MyClass',
|
||||
... 'whatis MyClass()',
|
||||
... 'whatis MyClass.mymethod',
|
||||
... 'whatis MyClass().mymethod',
|
||||
... 'continue',
|
||||
... ]):
|
||||
... test_function()
|
||||
--Return--
|
||||
> <doctest test.test_pdb.test_pdb_whatis_command[3]>(2)test_function()->None
|
||||
-> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
|
||||
(Pdb) whatis myvar
|
||||
<class 'tuple'>
|
||||
(Pdb) whatis myfunc
|
||||
Function myfunc
|
||||
(Pdb) whatis MyClass
|
||||
Class test.test_pdb.MyClass
|
||||
(Pdb) whatis MyClass()
|
||||
<class 'test.test_pdb.MyClass'>
|
||||
(Pdb) whatis MyClass.mymethod
|
||||
Function mymethod
|
||||
(Pdb) whatis MyClass().mymethod
|
||||
Method mymethod
|
||||
(Pdb) continue
|
||||
"""
|
||||
|
||||
def test_post_mortem():
|
||||
"""Test post mortem traceback debugging.
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
The pdb whatis command correctly reports instance methods as 'Method' rather than 'Function'.
|
Loading…
Reference in New Issue