This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] Fix PR python/17981


Yao> Yes, it is correct, but it is better to explicitly document an empty
Yao> sequence is returned if there are no breakpoints.

Here you go.

Tom

>From 372c5d3e52de3695ca2148eb7683801285072c0c Mon Sep 17 00:00:00 2001
From: Tom Tromey <tom@tromey.com>
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  <tom@tromey.com>

	PR python/17981:
	* python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple
	when there are no breakpoints.

2016-05-23  Tom Tromey  <tom@tromey.com>

	* python.texi (Basic Python): Document gdb.breakpoints return.

2016-05-23  Tom Tromey  <tom@tromey.com>

	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 07bc5d2..ef25519 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 2016-05-23  Tom Tromey  <tom@tromey.com>
 
+	PR python/17981:
+	* python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple
+	when there are no breakpoints.
+
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
 	PR python/19438, PR python/18393:
 	* python/py-objfile.c (objfpy_initialize): Initialize self->dict.
 	* python/py-progspace.c (pspy_initialize): Initialize self->dict.
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index fe2e3be..3be4a88 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,7 @@
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
+	* python.texi (Basic Python): Document gdb.breakpoints return.
+
 2016-05-17  Tom Tromey  <tom@tromey.com>
 
 	* gdb.texinfo (Supported Languages): Mention Rust.  Update menu.
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index ffbf89a..6623d8e 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 611a41e..ed9cae6 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 1f0e3f9..afa358b 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,11 @@
 2016-05-23  Tom Tromey  <tom@tromey.com>
 
+	PR python/17981:
+	* gdb.python/py-breakpoint.exp (test_bkpt_basic): Add test for
+	no-breakpoint case.
+
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
 	PR python/19438, PR python/18393:
 	* gdb.python/py-progspace.exp: Add "dir" test.
 	* gdb.python/py-objfile.exp: Add "dir" test.
diff --git a/gdb/testsuite/gdb.python/py-breakpoint.exp b/gdb/testsuite/gdb.python/py-breakpoint.exp
index d1d1b22..f501aa9 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.5.5


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]