summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Lapeyre <remi.lapeyre@henki.fr>2019-05-20 22:17:30 (GMT)
committerPablo Galindo <Pablogsal@gmail.com>2019-05-20 22:17:30 (GMT)
commitbf457c7d8224179a023957876e757f2a7ffc3d9d (patch)
tree3e880dd0ab6159e2fae2588ae6f2c6071c1bd7a2
parent1a3faf9d9740a8c7505c61839ef09929a7ff9e35 (diff)
downloadcpython-bf457c7d8224179a023957876e757f2a7ffc3d9d.zip
cpython-bf457c7d8224179a023957876e757f2a7ffc3d9d.tar.gz
cpython-bf457c7d8224179a023957876e757f2a7ffc3d9d.tar.bz2
bpo-36969: Make PDB args command display keyword only arguments (GH-13452)
-rwxr-xr-xLib/pdb.py6
-rw-r--r--Lib/test/test_pdb.py25
-rw-r--r--Misc/NEWS.d/next/Library/2019-05-20-23-31-20.bpo-36969.JkZORP.rst2
3 files changed, 26 insertions, 7 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py
index f5d33c2..0e7609e 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -1132,9 +1132,9 @@ class Pdb(bdb.Bdb, cmd.Cmd):
"""
co = self.curframe.f_code
dict = self.curframe_locals
- n = co.co_argcount
- if co.co_flags & 4: n = n+1
- if co.co_flags & 8: n = n+1
+ n = co.co_argcount + co.co_kwonlyargcount
+ if co.co_flags & inspect.CO_VARARGS: n = n+1
+ if co.co_flags & inspect.CO_VARKEYWORDS: n = n+1
for i in range(n):
name = co.co_varnames[i]
if name in dict:
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 56d8232..a33494d 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -77,9 +77,13 @@ def test_pdb_basic_commands():
... print('...')
... return foo.upper()
+ >>> def test_function3(arg=None, *, kwonly=None):
+ ... pass
+
>>> def test_function():
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
... ret = test_function_2('baz')
+ ... test_function3(kwonly=True)
... print(ret)
>>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
@@ -97,10 +101,13 @@ def test_pdb_basic_commands():
... 'jump 8', # jump over second for loop
... 'return', # return out of function
... 'retval', # display return value
+ ... 'next', # step to test_function3()
+ ... 'step', # stepping into test_function3()
+ ... 'args', # display function args
... 'continue',
... ]):
... test_function()
- > <doctest test.test_pdb.test_pdb_basic_commands[1]>(3)test_function()
+ > <doctest test.test_pdb.test_pdb_basic_commands[2]>(3)test_function()
-> ret = test_function_2('baz')
(Pdb) step
--Call--
@@ -123,14 +130,14 @@ def test_pdb_basic_commands():
[EOF]
(Pdb) bt
...
- <doctest test.test_pdb.test_pdb_basic_commands[2]>(18)<module>()
+ <doctest test.test_pdb.test_pdb_basic_commands[3]>(21)<module>()
-> test_function()
- <doctest test.test_pdb.test_pdb_basic_commands[1]>(3)test_function()
+ <doctest test.test_pdb.test_pdb_basic_commands[2]>(3)test_function()
-> ret = test_function_2('baz')
> <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2()
-> def test_function_2(foo, bar='default'):
(Pdb) up
- > <doctest test.test_pdb.test_pdb_basic_commands[1]>(3)test_function()
+ > <doctest test.test_pdb.test_pdb_basic_commands[2]>(3)test_function()
-> ret = test_function_2('baz')
(Pdb) down
> <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2()
@@ -168,6 +175,16 @@ def test_pdb_basic_commands():
-> return foo.upper()
(Pdb) retval
'BAZ'
+ (Pdb) next
+ > <doctest test.test_pdb.test_pdb_basic_commands[2]>(4)test_function()
+ -> test_function3(kwonly=True)
+ (Pdb) step
+ --Call--
+ > <doctest test.test_pdb.test_pdb_basic_commands[1]>(1)test_function3()
+ -> def test_function3(arg=None, *, kwonly=None):
+ (Pdb) args
+ arg = None
+ kwonly = True
(Pdb) continue
BAZ
"""
diff --git a/Misc/NEWS.d/next/Library/2019-05-20-23-31-20.bpo-36969.JkZORP.rst b/Misc/NEWS.d/next/Library/2019-05-20-23-31-20.bpo-36969.JkZORP.rst
new file mode 100644
index 0000000..9253ab9
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-20-23-31-20.bpo-36969.JkZORP.rst
@@ -0,0 +1,2 @@
+PDB command `args` now display keyword only arguments. Patch contributed by
+Rémi Lapeyre.