Implement explicit locations for Python breakpoints.

This introduces several new keywords to the bppy_init constructor.
The spec parameter is now optional but mutually exclusive to the
explicit keywords source, label, function and line.

gdb/ChangeLog

2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>

       * python/py-breakpoint.c (bppy_init): Use string_to_event_location
       over basic location code. Implement explicit location keywords.
       (bppy_init_validate_args): New function.
       * NEWS: Document Python explicit breakpoint locations.

doc/ChangeLog

2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>

       * python.texi (Breakpoints In Python): Add text relating
       to allowed explicit locations and keywords in gdb.Breakpoints.

testsuite/ChangeLog

2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>

       * gdb.python/py-breakpoint.exp (test_bkpt_explicit_loc): Add new
       tests for explicit locations.
This commit is contained in:
Phil Muldoon 2017-12-07 16:47:33 +00:00
parent 9c226a8689
commit 824cc835aa
8 changed files with 245 additions and 33 deletions

View file

@ -4878,27 +4878,30 @@ represented as Python @code{Long} values.
Python code can manipulate breakpoints via the @code{gdb.Breakpoint}
class.
@defun Breakpoint.__init__ (spec @r{[}, type @r{[}, wp_class @r{[},internal @r{[},temporary@r{]]]]})
@defun Breakpoint.__init__ (spec @r{[}, type @r{[}, wp_class @r{[}, internal @r{[}, temporary @r{]}, source @r{]}, function @r{]}, label @r{]}, line @r{]]]]]]]]})
Create a new breakpoint according to @var{spec}, which is a string
naming the location of the breakpoint, or an expression that defines a
watchpoint. The contents can be any location recognized by the
@code{break} command, or in the case of a watchpoint, by the
@code{watch} command. The optional @var{type} denotes the breakpoint
to create from the types defined later in this chapter. This argument
can be either @code{gdb.BP_BREAKPOINT} or @code{gdb.BP_WATCHPOINT}; it
defaults to @code{gdb.BP_BREAKPOINT}. The optional @var{internal}
argument allows the breakpoint to become invisible to the user. The
breakpoint will neither be reported when created, nor will it be
listed in the output from @code{info breakpoints} (but will be listed
with the @code{maint info breakpoints} command). The optional
@var{temporary} argument makes the breakpoint a temporary breakpoint.
Temporary breakpoints are deleted after they have been hit. Any
further access to the Python breakpoint after it has been hit will
result in a runtime error (as that breakpoint has now been
automatically deleted). The optional @var{wp_class} argument defines
the class of watchpoint to create, if @var{type} is
@code{gdb.BP_WATCHPOINT}. If a watchpoint class is not provided, it
is assumed to be a @code{gdb.WP_WRITE} class.
watchpoint. The contents can be any location recognized by the
@code{break} command or, in the case of a watchpoint, by the
@code{watch} command. Alternatively, create a new a explicit location
breakpoint (@pxref{Explicit Locations}) according to the
specifications contained in the key words @var{source},
@var{function}, @var{label} and @var{line}. The optional @var{type}
denotes the breakpoint to create from the types defined later in this
chapter. This argument can be either @code{gdb.BP_BREAKPOINT} or
@code{gdb.BP_WATCHPOINT}; it defaults to @code{gdb.BP_BREAKPOINT}.
The optional @var{internal} argument allows the breakpoint to become
invisible to the user. The breakpoint will neither be reported when
created, nor will it be listed in the output from @code{info
breakpoints} (but will be listed with the @code{maint info
breakpoints} command). The optional @var{temporary} argument makes
the breakpoint a temporary breakpoint. Temporary breakpoints are
deleted after they have been hit. Any further access to the Python
breakpoint after it has been hit will result in a runtime error (as
that breakpoint has now been automatically deleted). The optional
@var{wp_class} argument defines the class of watchpoint to create, if
@var{type} is @code{gdb.BP_WATCHPOINT}. If a watchpoint class is not
provided, it is assumed to be a @code{gdb.WP_WRITE} class.
@end defun
The available types are represented by constants defined in the @code{gdb}