Browse Source

2013-08-29 Phil Muldoon <pmuldoon@redhat.com>

PR python/15752

	* python/py-framefilter.c (apply_frame_filter): Check
	gdb_python_initialized.  Exit if the Python frame-filter code
	cannot be initialized.
binutils-2_24-branch
Phil Muldoon 13 years ago
parent
commit
8ee002dfdc
  1. 8
      gdb/ChangeLog
  2. 24
      gdb/python/py-framefilter.c

8
gdb/ChangeLog

@ -1,3 +1,11 @@
2013-08-29 Phil Muldoon <pmuldoon@redhat.com>
PR python/15752
* python/py-framefilter.c (apply_frame_filter): Check
gdb_python_initialized. Exit if the Python frame-filter code
cannot be initialized.
2013-08-29 Phil Muldoon <pmuldoon@redhat.com>
PR cli/15842

24
gdb/python/py-framefilter.c

@ -1468,6 +1468,9 @@ apply_frame_filter (struct frame_info *frame, int flags,
PyObject *item;
htab_t levels_printed;
if (!gdb_python_initialized)
return PY_BT_NO_FILTERS;
cleanups = ensure_python_env (gdbarch, current_language);
TRY_CATCH (except, RETURN_MASK_ALL)
@ -1483,7 +1486,24 @@ apply_frame_filter (struct frame_info *frame, int flags,
iterable = bootstrap_python_frame_filters (frame, frame_low, frame_high);
if (iterable == NULL)
goto error;
{
/* Normally if there is an error GDB prints the exception,
abandons the backtrace and exits. The user can then call "bt
no-filters", and get a default backtrace (it would be
confusing to automatically start a standard backtrace halfway
through a Python filtered backtrace). However in the case
where GDB cannot initialize the frame filters (most likely
due to incorrect auto-load paths), GDB has printed nothing.
In this case it is OK to print the default backtrace after
printing the error message. GDB returns PY_BT_NO_FILTERS
here to signify there are no filters after printing the
initialization error. This return code will trigger a
default backtrace. */
gdbpy_print_stack ();
do_cleanups (cleanups);
return PY_BT_NO_FILTERS;
}
/* If iterable is None, then there are no frame filters registered.
If this is the case, defer to default GDB printing routines in MI
@ -1521,6 +1541,8 @@ apply_frame_filter (struct frame_info *frame, int flags,
do_cleanups (cleanups);
return success;
/* Exit and abandon backtrace on error, printing the exception that
is set. */
error:
gdbpy_print_stack ();
do_cleanups (cleanups);

Loading…
Cancel
Save