Fix Python gdb.Breakpoint.location crash
I noticed today that gdb.Breakpoint.location will crash when applied to a catchpoint made with "catch throw". The bug is that "catch throw" makes a breakpoint that is of type bp_breakpoint, but which does not have a location. Regression tested on x86-64 Fedora 28. gdb/ChangeLog 2018-10-06 Tom Tromey <tom@tromey.com> * python/py-breakpoint.c (bppy_get_location): Handle a bp_breakpoint without a location. gdb/testsuite/ChangeLog 2018-10-06 Tom Tromey <tom@tromey.com> * gdb.python/py-breakpoint.exp (check_last_event): Check location of a "throw" catchpoint.
This commit is contained in:
parent
2fb009bbd1
commit
2a8be20359
4 changed files with 21 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2018-10-06 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* python/py-breakpoint.c (bppy_get_location): Handle a
|
||||||
|
bp_breakpoint without a location.
|
||||||
|
|
||||||
2018-10-06 Tom Tromey <tom@tromey.com>
|
2018-10-06 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq)
|
* python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq)
|
||||||
|
|
|
@ -391,7 +391,12 @@ bppy_get_location (PyObject *self, void *closure)
|
||||||
if (obj->bp->type != bp_breakpoint)
|
if (obj->bp->type != bp_breakpoint)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
|
||||||
str = event_location_to_string (obj->bp->location.get ());
|
struct event_location *location = obj->bp->location.get ();
|
||||||
|
/* "catch throw" makes a breakpoint of type bp_breakpoint that does
|
||||||
|
not have a location. */
|
||||||
|
if (location == nullptr)
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
str = event_location_to_string (location);
|
||||||
if (! str)
|
if (! str)
|
||||||
str = "";
|
str = "";
|
||||||
return host_string_to_python_string (str);
|
return host_string_to_python_string (str);
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2018-10-06 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* gdb.python/py-breakpoint.exp (check_last_event): Check location
|
||||||
|
of a "throw" catchpoint.
|
||||||
|
|
||||||
2018-10-06 Sergio Durigan Junior <sergiodj@redhat.com>
|
2018-10-06 Sergio Durigan Junior <sergiodj@redhat.com>
|
||||||
|
|
||||||
* gdb.base/info-proc.exp: Update string expected from "help info
|
* gdb.base/info-proc.exp: Update string expected from "help info
|
||||||
|
|
|
@ -616,6 +616,11 @@ proc_with_prefix test_bkpt_explicit_loc {} {
|
||||||
gdb_test "python bp1 = gdb.Breakpoint (function=\"blah\")" \
|
gdb_test "python bp1 = gdb.Breakpoint (function=\"blah\")" \
|
||||||
"Function \"blah\" not defined.*" \
|
"Function \"blah\" not defined.*" \
|
||||||
"set invalid explicit breakpoint by missing function"
|
"set invalid explicit breakpoint by missing function"
|
||||||
|
|
||||||
|
delete_breakpoints
|
||||||
|
gdb_test "catch throw" "Catchpoint .* \\(throw\\)"
|
||||||
|
gdb_test "python print (gdb.breakpoints()\[0\].location)" None \
|
||||||
|
"Examine location of catchpoint"
|
||||||
}
|
}
|
||||||
|
|
||||||
proc_with_prefix test_bkpt_qualified {} {
|
proc_with_prefix test_bkpt_qualified {} {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue