2010-11-29 Phil Muldoon <pmuldoon@redhat.com>
authorPhil Muldoon <pmuldoon@redhat.com>
Mon, 29 Nov 2010 13:49:05 +0000 (13:49 +0000)
committerPhil Muldoon <pmuldoon@redhat.com>
Mon, 29 Nov 2010 13:49:05 +0000 (13:49 +0000)
        PR python/12199

* python/py-breakpoint.c (bppy_delete_breakpoint): New function.

2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>

        PR python/12199

* gdb.python/py-breakpoint.exp: Test the delete method.

2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>

        PR python/12199

* gdb.texinfo (Breakpoints In Python): Document "delete" method.

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/python/py-breakpoint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-breakpoint.exp

index a7aa825bf803bed916b03f8b2e157f2f3aeb276b..51961a3952ffffdfa878fd2a7ac0c156c782c565 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>
+
+        PR python/12199
+
+       * python/py-breakpoint.c (bppy_delete_breakpoint): New function.
+
 2010-11-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix step_resume_breakpoint unsaved during an infcall.
index dd00d1a9ab57cb369cb58ef2a079e50d090d5886..df2449a87f8186b679ac01297ba5dba1e08d9cef 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>
+
+        PR python/12199
+
+       * gdb.texinfo (Breakpoints In Python): Document "delete" method.
+
 2010-11-23  Tom Tromey  <tromey@redhat.com>
 
        * gdb.texinfo (Top): Check SYSTEM_READLINE.
index 5550f516ceb4475ceb1803b86a07ac99b50c0724..28ea55d645328aee265991cbe6d469dbdf6ebe1b 100644 (file)
@@ -22911,6 +22911,12 @@ watchpoint scope, the watchpoint remains valid even if execution of the
 inferior leaves the scope of that watchpoint.
 @end defmethod
 
+@defmethod Breakpoint delete
+Permanently deletes the @value{GDBN} breakpoint.  This also
+invalidates the Python @code{Breakpoint} object.  Any further access
+to this object's attributes or methods will raise an error.
+@end defmethod
+
 @defivar Breakpoint enabled
 This attribute is @code{True} if the breakpoint is enabled, and
 @code{False} otherwise.  This attribute is writable.
index 64e30ef0ea2a3a22c5e5945970a10dcfcbdb56b7..88d99306dd2d27e8ca4823b1855ac93215e98501 100644 (file)
@@ -283,6 +283,23 @@ bppy_set_task (PyObject *self, PyObject *newvalue, void *closure)
   return 0;
 }
 
+/* Python function which deletes the underlying GDB breakpoint.  This
+   triggers the breakpoint_deleted observer which will call
+   gdbpy_breakpoint_deleted; that function cleans up the Python
+   sections.  */
+
+static PyObject *
+bppy_delete_breakpoint (PyObject *self, PyObject *args)
+{
+  breakpoint_object *self_bp = (breakpoint_object *) self;
+
+  BPPY_REQUIRE_VALID (self_bp);
+
+  delete_breakpoint (self_bp->bp);
+
+  Py_RETURN_NONE;
+}
+
 
 /* Python function to set the ignore count of a breakpoint.  */
 static int
@@ -843,6 +860,8 @@ static PyMethodDef breakpoint_object_methods[] =
 {
   { "is_valid", bppy_is_valid, METH_NOARGS,
     "Return true if this breakpoint is valid, false if not." },
+  { "delete", bppy_delete_breakpoint, METH_NOARGS,
+    "Delete the underlying GDB breakpoint." },
   { NULL } /* Sentinel.  */
 };
 
index e1cd9bb51854a1f7824e2665a597c4ad6c01a69c..22c34768c1d8063383736c3abffa9b2c0e0c29a4 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-29  Phil Muldoon  <pmuldoon@redhat.com>
+
+        PR python/12199
+
+       * gdb.python/py-breakpoint.exp: Test the delete method.
+
 2010-11-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix step_resume_breakpoint unsaved during an infcall.
index d030b550ed5f9d92e800e7a2f201436b60d8e4cd..34a64a3706722179b7e71aef323ac58815ad7e66 100644 (file)
@@ -83,6 +83,29 @@ gdb_test "python print blist\[0\].number" "1" "Check breakpoint number"
 gdb_test "python print blist\[1\].number" "2" "Check breakpoint number"
 gdb_test "python print blist\[2\].number" "3" "Check breakpoint number"
 
+# Start with a fresh gdb.
+clean_restart ${testfile}
+
+if ![runto_main] then {
+    fail "Cannot run to main."
+    return 0
+}
+
+# Test breakpoints are deleted correctly.
+set deltst_location [gdb_get_line_number "Break at multiply."]
+set end_location [gdb_get_line_number "Break at end."]
+gdb_py_test_silent_cmd  "python dp1 = gdb.Breakpoint (\"$deltst_location\")" "Set breakpoint" 0
+gdb_breakpoint [gdb_get_line_number "Break at end."]
+gdb_py_test_silent_cmd "python del_list = gdb.breakpoints()" "Get Breakpoint List" 0
+gdb_test "python print len(del_list)" "3" "Number of breakpoints before delete"
+gdb_continue_to_breakpoint "Break at multiply." ".*/$srcfile:$deltst_location.*"
+gdb_py_test_silent_cmd  "python dp1.delete()" "Delete Breakpoint" 0
+gdb_test "python print dp1.number" "RuntimeError: Breakpoint 2 is invalid.*" "Check breakpoint invalidated"
+gdb_py_test_silent_cmd "python del_list = gdb.breakpoints()" "Get Breakpoint List" 0
+gdb_test "python print len(del_list)" "2" "Number of breakpoints after delete"
+gdb_continue_to_breakpoint "Break at end." ".*/$srcfile:$end_location.*"
+
+
 # Start with a fresh gdb.
 clean_restart ${testfile}