This should fix the error with glib. An error message will still be printed, but a default backtrace will occur in this case. -- Index: gdb-7.8.90.20150214/gdb/python/py-framefilter.c =================================================================== --- gdb-7.8.90.20150214.orig/gdb/python/py-framefilter.c 2015-02-14 17:35:12.277653200 +0100 +++ gdb-7.8.90.20150214/gdb/python/py-framefilter.c 2015-02-14 17:36:15.737953789 +0100 @@ -1506,6 +1506,7 @@ gdbpy_apply_frame_filter (const struct e volatile struct gdb_exception except; PyObject *item; htab_t levels_printed; + int count_printed = 0; if (!gdb_python_initialized) return EXT_LANG_BT_NO_FILTERS; @@ -1525,24 +1526,7 @@ gdbpy_apply_frame_filter (const struct e iterable = bootstrap_python_frame_filters (frame, frame_low, frame_high); if (iterable == NULL) - { - /* 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 EXT_LANG_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 EXT_LANG_BT_NO_FILTERS; - } + goto error_nothing_printed; /* If iterable is None, then there are no frame filters registered. If this is the case, defer to default GDB printing routines in MI @@ -1573,15 +1557,40 @@ gdbpy_apply_frame_filter (const struct e error and continue with other frames. */ if (success == EXT_LANG_BT_ERROR) gdbpy_print_stack (); + + count_printed++; } if (item == NULL && PyErr_Occurred ()) - goto error; + { + if (count_printed > 0) + goto error; + else + goto error_nothing_printed; + } done: do_cleanups (cleanups); return success; + /* 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 EXT_LANG_BT_NO_FILTERS + here to signify there are no filters after printing the + initialization error. This return code will trigger a + default backtrace. */ + + error_nothing_printed: + gdbpy_print_stack (); + do_cleanups (cleanups); + return EXT_LANG_BT_NO_FILTERS; + /* Exit and abandon backtrace on error, printing the exception that is set. */ error: