aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/doc/ChangeLog6
-rw-r--r--gdb/doc/gdb.texinfo6
-rw-r--r--gdb/python/py-breakpoint.c19
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.python/py-breakpoint.exp23
6 files changed, 66 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a7aa825..51961a3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index dd00d1a..df2449a 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -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.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 5550f51..28ea55d 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -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.
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index 64e30ef..88d9930 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -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. */
};
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index e1cd9bb..22c3476 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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.
diff --git a/gdb/testsuite/gdb.python/py-breakpoint.exp b/gdb/testsuite/gdb.python/py-breakpoint.exp
index d030b55..34a64a3 100644
--- a/gdb/testsuite/gdb.python/py-breakpoint.exp
+++ b/gdb/testsuite/gdb.python/py-breakpoint.exp
@@ -91,6 +91,29 @@ if ![runto_main] then {
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}
+
+if ![runto_main] then {
+ fail "Cannot run to main."
+ return 0
+}
+
# Test conditional setting.
set bp_location1 [gdb_get_line_number "Break at multiply."]
gdb_py_test_silent_cmd "python bp1 = gdb.Breakpoint (\"$bp_location1\")" "Set breakpoint" 0