Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
This commit is contained in:
parent
2b55d27fdb
commit
dd2c5ed0e6
82
gdb-btrobust.patch
Normal file
82
gdb-btrobust.patch
Normal file
@ -0,0 +1,82 @@
|
||||
This should fix the error with glib. An error message will still be
|
||||
printed, but a default backtrace will occur in this case.
|
||||
|
||||
--
|
||||
|
||||
--- gdb-7.7.90.20140613/gdb/python/py-framefilter.c-orig 2014-06-13 03:59:37.000000000 +0200
|
||||
+++ gdb-7.7.90.20140613/gdb/python/py-framefilter.c 2014-06-27 17:20:00.945271945 +0200
|
||||
@@ -1475,6 +1475,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;
|
||||
@@ -1494,24 +1495,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
|
||||
@@ -1540,15 +1524,39 @@ gdbpy_apply_frame_filter (const struct e
|
||||
gdbpy_print_stack ();
|
||||
|
||||
Py_DECREF (item);
|
||||
+ 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:
|
9
gdb.spec
9
gdb.spec
@ -25,7 +25,7 @@ Version: 7.7.90.20140613
|
||||
|
||||
# The release always contains a leading reserved number, start it at 1.
|
||||
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
|
||||
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL
|
||||
Group: Development/Debuggers
|
||||
@ -540,6 +540,9 @@ Patch913: gdb-watchpoint-fork-fix.patch
|
||||
# Fix --with-system-readline with readline-6.3 patch 5.
|
||||
Patch914: gdb-readline-6.3.5.patch
|
||||
|
||||
# Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
|
||||
Patch918: gdb-btrobust.patch
|
||||
|
||||
%if 0%{!?rhel:1} || 0%{?rhel} > 6
|
||||
# RL_STATE_FEDORA_GDB would not be found for:
|
||||
# Patch642: gdb-readline62-ask-more-rh.patch
|
||||
@ -839,6 +842,7 @@ find -name "*.info*"|xargs rm -f
|
||||
%patch911 -p1
|
||||
%patch913 -p1
|
||||
%patch914 -p1
|
||||
%patch918 -p1
|
||||
|
||||
%patch848 -p1
|
||||
%if 0%{!?el6:1}
|
||||
@ -1324,6 +1328,9 @@ then
|
||||
fi
|
||||
|
||||
%changelog
|
||||
* Fri Jun 27 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-5.fc21
|
||||
- Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
|
||||
|
||||
* Tue Jun 24 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-4.fc21
|
||||
- [aarch64] Fix compilation error.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user