From 1957f6b89f3db02d51e3e3361de6af073a03f19d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 18 May 2016 21:41:28 -0600 Subject: [PATCH] Fix PR python/17981 PR python/17981 notes that gdb.breakpoints() returns None when there are no breakpoints; whereas an empty list or tuple would be more in keeping with Python and the documentation. This patch fixes the bug by changing the no-breakpoint return to make an empty tuple. Built and regtested on x86-64 Fedora 23. 2016-05-23 Tom Tromey PR python/17981: * python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple when there are no breakpoints. 2016-05-23 Tom Tromey * python.texi (Basic Python): Document gdb.breakpoints return. 2016-05-23 Tom Tromey PR python/17981: * gdb.python/py-breakpoint.exp (test_bkpt_basic): Add test for no-breakpoint case. --- gdb/ChangeLog | 6 ++++++ gdb/doc/ChangeLog | 4 ++++ gdb/doc/python.texi | 5 ++++- gdb/python/py-breakpoint.c | 4 ++-- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.python/py-breakpoint.exp | 5 ++++- 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 45cfe75a41..9359532193 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2016-05-23 Tom Tromey + + PR python/17981: + * python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple + when there are no breakpoints. + 2016-05-24 Pedro Alves PR gdb/19828 diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 594f926e89..34b9527366 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2016-05-23 Tom Tromey + + * python.texi (Basic Python): Document gdb.breakpoints return. + 2016-05-24 Tom Tromey PR gdb/19194: diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index ffbf89abcb..6623d8e1df 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -236,7 +236,10 @@ and height, and its pagination will be disabled; @pxref{Screen Size}. @findex gdb.breakpoints @defun gdb.breakpoints () Return a sequence holding all of @value{GDBN}'s breakpoints. -@xref{Breakpoints In Python}, for more information. +@xref{Breakpoints In Python}, for more information. In @value{GDBN} +version 7.11 and earlier, this function returned @code{None} if there +were no breakpoints. This peculiarity was subsequently fixed, and now +@code{gdb.breakpoints} returns an empty sequence in this case. @end defun @findex gdb.parameter diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index 611a41e182..ed9cae68b0 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -746,13 +746,13 @@ gdbpy_breakpoints (PyObject *self, PyObject *args) PyObject *list, *tuple; if (bppy_live == 0) - Py_RETURN_NONE; + return PyTuple_New (0); list = PyList_New (0); if (!list) return NULL; - /* If iteratre_over_breakpoints returns non NULL it signals an error + /* If iterate_over_breakpoints returns non NULL it signals an error condition. In that case abandon building the list and return NULL. */ if (iterate_over_breakpoints (build_bp_list, list) != NULL) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 16b756c506..319c0f5c8c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-05-23 Tom Tromey + + PR python/17981: + * gdb.python/py-breakpoint.exp (test_bkpt_basic): Add test for + no-breakpoint case. + 2016-05-24 Pedro Alves PR gdb/19828 diff --git a/gdb/testsuite/gdb.python/py-breakpoint.exp b/gdb/testsuite/gdb.python/py-breakpoint.exp index d1d1b2253f..f501aa91d8 100644 --- a/gdb/testsuite/gdb.python/py-breakpoint.exp +++ b/gdb/testsuite/gdb.python/py-breakpoint.exp @@ -34,12 +34,15 @@ proc test_bkpt_basic { } { # Start with a fresh gdb. clean_restart ${testfile} + # We should start with no breakpoints. + gdb_test "python print (gdb.breakpoints())" "\\(\\)" + if ![runto_main] then { fail "Cannot run to main." return 0 } - # Initially there should be one breakpoint: main. + # Now there should be one breakpoint: main. gdb_py_test_silent_cmd "python blist = gdb.breakpoints()" \ "Get Breakpoint List" 0 gdb_test "python print (blist\[0\])" \ -- 2.34.1