PR python/17698 - add Breakpoint.pending
This patch adds a "pending" attribute to gdb.Breakpoint. Built and regtested on x86-64 Fedora 23. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/17698: * NEWS: Update. * python/py-breakpoint.c (bppy_get_pending): New function. (breakpoint_object_getset): Add entry for "pending". * breakpoint.h (pending_breakpoint_p): Declare. * breakpoint.c (pending_breakpoint_p): New function. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/17698: * python.texi (Breakpoints In Python): Document Breakpoint.pending. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/17698: * gdb.python/py-breakpoint.exp (test_bkpt_basic): Add "pending" test. (test_watchpoints): Likewise. (test_bkpt_pending): New proc.
This commit is contained in:
parent
43684a7b84
commit
93daf339a4
9 changed files with 76 additions and 0 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
PR python/17698:
|
||||||
|
* NEWS: Update.
|
||||||
|
* python/py-breakpoint.c (bppy_get_pending): New function.
|
||||||
|
(breakpoint_object_getset): Add entry for "pending".
|
||||||
|
* breakpoint.h (pending_breakpoint_p): Declare.
|
||||||
|
* breakpoint.c (pending_breakpoint_p): New function.
|
||||||
|
|
||||||
2016-07-13 Tom Tromey <tom@tromey.com>
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python/py-breakpoint.c (bppy_get_visibility)
|
* python/py-breakpoint.c (bppy_get_visibility)
|
||||||
|
|
5
gdb/NEWS
5
gdb/NEWS
|
@ -80,6 +80,11 @@ new-ui INTERP TTY
|
||||||
Start a new user interface instance running INTERP as interpreter,
|
Start a new user interface instance running INTERP as interpreter,
|
||||||
using the TTY file for input/output.
|
using the TTY file for input/output.
|
||||||
|
|
||||||
|
* Python Scripting
|
||||||
|
|
||||||
|
** gdb.Breakpoint objects have a new attribute "pending", which
|
||||||
|
indicates whether the breakpoint is pending.
|
||||||
|
|
||||||
* Support for tracepoints and fast tracepoints on s390-linux and s390x-linux
|
* Support for tracepoints and fast tracepoints on s390-linux and s390x-linux
|
||||||
was added in GDBserver, including JIT compiling fast tracepoint's
|
was added in GDBserver, including JIT compiling fast tracepoint's
|
||||||
conditional expression bytecode into native code.
|
conditional expression bytecode into native code.
|
||||||
|
|
|
@ -6815,6 +6815,14 @@ user_breakpoint_p (struct breakpoint *b)
|
||||||
return b->number > 0;
|
return b->number > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See breakpoint.h. */
|
||||||
|
|
||||||
|
int
|
||||||
|
pending_breakpoint_p (struct breakpoint *b)
|
||||||
|
{
|
||||||
|
return b->loc == NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Print information on user settable breakpoint (watchpoint, etc)
|
/* Print information on user settable breakpoint (watchpoint, etc)
|
||||||
number BNUM. If BNUM is -1 print all user-settable breakpoints.
|
number BNUM. If BNUM is -1 print all user-settable breakpoints.
|
||||||
If ALLFLAG is non-zero, include non-user-settable breakpoints. If
|
If ALLFLAG is non-zero, include non-user-settable breakpoints. If
|
||||||
|
|
|
@ -1618,6 +1618,9 @@ extern int pc_at_non_inline_function (struct address_space *aspace,
|
||||||
|
|
||||||
extern int user_breakpoint_p (struct breakpoint *);
|
extern int user_breakpoint_p (struct breakpoint *);
|
||||||
|
|
||||||
|
/* Return true if this breakpoint is pending, false if not. */
|
||||||
|
extern int pending_breakpoint_p (struct breakpoint *);
|
||||||
|
|
||||||
/* Attempt to determine architecture of location identified by SAL. */
|
/* Attempt to determine architecture of location identified by SAL. */
|
||||||
extern struct gdbarch *get_sal_arch (struct symtab_and_line sal);
|
extern struct gdbarch *get_sal_arch (struct symtab_and_line sal);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
PR python/17698:
|
||||||
|
* python.texi (Breakpoints In Python): Document
|
||||||
|
Breakpoint.pending.
|
||||||
|
|
||||||
2016-07-13 Tom Tromey <tom@tromey.com>
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python.texi (Breakpoints In Python): Move table of types and
|
* python.texi (Breakpoints In Python): Move table of types and
|
||||||
|
|
|
@ -4685,6 +4685,12 @@ first command is @code{silent}. This is not reported by the
|
||||||
@code{silent} attribute.
|
@code{silent} attribute.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
|
@defvar Breakpoint.pending
|
||||||
|
This attribute is @code{True} if the breakpoint is pending, and
|
||||||
|
@code{False} otherwise. @xref{Set Breaks}. This attribute is
|
||||||
|
read-only.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@anchor{python_breakpoint_thread}
|
@anchor{python_breakpoint_thread}
|
||||||
@defvar Breakpoint.thread
|
@defvar Breakpoint.thread
|
||||||
If the breakpoint is thread-specific, this attribute holds the
|
If the breakpoint is thread-specific, this attribute holds the
|
||||||
|
|
|
@ -563,6 +563,24 @@ bppy_get_temporary (PyObject *self, void *closure)
|
||||||
Py_RETURN_FALSE;
|
Py_RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Python function to determine if the breakpoint is a pending
|
||||||
|
breakpoint. */
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
bppy_get_pending (PyObject *self, void *closure)
|
||||||
|
{
|
||||||
|
gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
|
||||||
|
|
||||||
|
BPPY_REQUIRE_VALID (self_bp);
|
||||||
|
|
||||||
|
if (is_watchpoint (self_bp->bp))
|
||||||
|
Py_RETURN_FALSE;
|
||||||
|
if (pending_breakpoint_p (self_bp->bp))
|
||||||
|
Py_RETURN_TRUE;
|
||||||
|
|
||||||
|
Py_RETURN_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Python function to get the breakpoint's number. */
|
/* Python function to get the breakpoint's number. */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
bppy_get_number (PyObject *self, void *closure)
|
bppy_get_number (PyObject *self, void *closure)
|
||||||
|
@ -1054,6 +1072,8 @@ or None if no condition set."},
|
||||||
"Whether the breakpoint is visible to the user."},
|
"Whether the breakpoint is visible to the user."},
|
||||||
{ "temporary", bppy_get_temporary, NULL,
|
{ "temporary", bppy_get_temporary, NULL,
|
||||||
"Whether this breakpoint is a temporary breakpoint."},
|
"Whether this breakpoint is a temporary breakpoint."},
|
||||||
|
{ "pending", bppy_get_pending, NULL,
|
||||||
|
"Whether this breakpoint is a pending breakpoint."},
|
||||||
{ NULL } /* Sentinel. */
|
{ NULL } /* Sentinel. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
PR python/17698:
|
||||||
|
* gdb.python/py-breakpoint.exp (test_bkpt_basic): Add "pending"
|
||||||
|
test.
|
||||||
|
(test_watchpoints): Likewise.
|
||||||
|
(test_bkpt_pending): New proc.
|
||||||
|
|
||||||
2016-07-13 Tom Tromey <tom@tromey.com>
|
2016-07-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
PR cli/18053:
|
PR cli/18053:
|
||||||
|
|
|
@ -49,6 +49,8 @@ proc test_bkpt_basic { } {
|
||||||
"<gdb.Breakpoint object at $hex>" "Check obj exists @main"
|
"<gdb.Breakpoint object at $hex>" "Check obj exists @main"
|
||||||
gdb_test "python print (blist\[0\].location)" \
|
gdb_test "python print (blist\[0\].location)" \
|
||||||
"main." "Check breakpoint location @main"
|
"main." "Check breakpoint location @main"
|
||||||
|
gdb_test "python print (blist\[0\].pending)" "False" \
|
||||||
|
"Check pending status of main breakpoint"
|
||||||
|
|
||||||
set mult_line [gdb_get_line_number "Break at multiply."]
|
set mult_line [gdb_get_line_number "Break at multiply."]
|
||||||
gdb_breakpoint ${mult_line}
|
gdb_breakpoint ${mult_line}
|
||||||
|
@ -267,6 +269,7 @@ proc test_watchpoints { } {
|
||||||
|
|
||||||
gdb_py_test_silent_cmd "python wp1 = gdb.Breakpoint (\"result\", type=gdb.BP_WATCHPOINT, wp_class=gdb.WP_WRITE )" \
|
gdb_py_test_silent_cmd "python wp1 = gdb.Breakpoint (\"result\", type=gdb.BP_WATCHPOINT, wp_class=gdb.WP_WRITE )" \
|
||||||
"Set watchpoint" 0
|
"Set watchpoint" 0
|
||||||
|
gdb_test "python print (wp1.pending)" "False"
|
||||||
gdb_test "continue" \
|
gdb_test "continue" \
|
||||||
".*\[Ww\]atchpoint.*result.*Old value = 0.*New value = 25.*main.*" \
|
".*\[Ww\]atchpoint.*result.*Old value = 0.*New value = 25.*main.*" \
|
||||||
"Test watchpoint write"
|
"Test watchpoint write"
|
||||||
|
@ -497,6 +500,13 @@ proc test_bkpt_address {} {
|
||||||
".*Breakpoint ($decimal)+ at .*$srcfile, line ($decimal)+\."
|
".*Breakpoint ($decimal)+ at .*$srcfile, line ($decimal)+\."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc test_bkpt_pending {} {
|
||||||
|
delete_breakpoints
|
||||||
|
gdb_breakpoint "nosuchfunction" allow-pending
|
||||||
|
gdb_test "python print (gdb.breakpoints()\[0\].pending)" "True" \
|
||||||
|
"Check pending status of pending breakpoint"
|
||||||
|
}
|
||||||
|
|
||||||
test_bkpt_basic
|
test_bkpt_basic
|
||||||
test_bkpt_deletion
|
test_bkpt_deletion
|
||||||
test_bkpt_cond_and_cmds
|
test_bkpt_cond_and_cmds
|
||||||
|
@ -506,3 +516,4 @@ test_bkpt_internal
|
||||||
test_bkpt_eval_funcs
|
test_bkpt_eval_funcs
|
||||||
test_bkpt_temporary
|
test_bkpt_temporary
|
||||||
test_bkpt_address
|
test_bkpt_address
|
||||||
|
test_bkpt_pending
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue