bpo-41609: Fix output of pdb's whatis command for instance methods (GH-21935)
This commit is contained in:
parent
b260635b3d
commit
022bc7572f
16
Lib/pdb.py
16
Lib/pdb.py
|
@ -1312,14 +1312,6 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
||||||
# _getval() already printed the error
|
# _getval() already printed the error
|
||||||
return
|
return
|
||||||
code = None
|
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?
|
# Is it an instance method?
|
||||||
try:
|
try:
|
||||||
code = value.__func__.__code__
|
code = value.__func__.__code__
|
||||||
|
@ -1328,6 +1320,14 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
||||||
if code:
|
if code:
|
||||||
self.message('Method %s' % code.co_name)
|
self.message('Method %s' % code.co_name)
|
||||||
return
|
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?
|
# Is it a class?
|
||||||
if value.__class__ is type:
|
if value.__class__ is type:
|
||||||
self.message('Class %s.%s' % (value.__module__, value.__qualname__))
|
self.message('Class %s.%s' % (value.__module__, value.__qualname__))
|
||||||
|
|
|
@ -425,6 +425,47 @@ def test_list_commands():
|
||||||
(Pdb) continue
|
(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():
|
def test_post_mortem():
|
||||||
"""Test post mortem traceback debugging.
|
"""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