aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-12-25 11:44:58 -0700
committerTom Tromey <tom@tromey.com>2018-12-27 13:34:39 -0700
commit6ef2312a177ebdfa841e82b515c144975073a501 (patch)
treeba1050399bcbfe2ac09c66ed5670c97a58abe43e
parentec9c2750b7bab8a55aaf7d2386e809d4e81deb03 (diff)
downloadgdb-6ef2312a177ebdfa841e82b515c144975073a501.zip
gdb-6ef2312a177ebdfa841e82b515c144975073a501.tar.gz
gdb-6ef2312a177ebdfa841e82b515c144975073a501.tar.bz2
Consolidate some Python exception-printing functions
A few places in the Python code would either call gdbpy_print_stack, or throw a gdb "quit", depending on the pending exception. This patch consolidates these into a helper function. gdb/ChangeLog 2018-12-27 Tom Tromey <tom@tromey.com> * python/python-internal.h (gdbpy_print_stack_or_quit): Declare. * python/py-unwind.c (pyuw_sniffer): Use gdbpy_print_stack_or_quit. * python/py-framefilter.c (throw_quit_or_print_exception): Remove. (gdbpy_apply_frame_filter): Use gdbpy_print_stack_or_quit. * python/python.c (gdbpy_print_stack_or_quit): New function.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/python/py-framefilter.c21
-rw-r--r--gdb/python/py-unwind.c7
-rw-r--r--gdb/python/python-internal.h1
-rw-r--r--gdb/python/python.c14
5 files changed, 29 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 15c59b2..612f82f 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
2018-12-27 Tom Tromey <tom@tromey.com>
+ * python/python-internal.h (gdbpy_print_stack_or_quit): Declare.
+ * python/py-unwind.c (pyuw_sniffer): Use
+ gdbpy_print_stack_or_quit.
+ * python/py-framefilter.c (throw_quit_or_print_exception):
+ Remove.
+ (gdbpy_apply_frame_filter): Use gdbpy_print_stack_or_quit.
+ * python/python.c (gdbpy_print_stack_or_quit): New function.
+
+2018-12-27 Tom Tromey <tom@tromey.com>
+
* python/py-value.c (convert_value_from_python): Use
gdbpy_convert_exception.
* python/py-param.c (parmpy_init): Use gdbpy_convert_exception.
diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
index fe17b70..b4bc413 100644
--- a/gdb/python/py-framefilter.c
+++ b/gdb/python/py-framefilter.c
@@ -1054,21 +1054,6 @@ bootstrap_python_frame_filters (struct frame_info *frame,
return iterable.release ();
}
-/* A helper function that will either print an exception or, if it is
- a KeyboardException, throw a quit. This can only be called when
- the Python exception is set. */
-
-static void
-throw_quit_or_print_exception ()
-{
- if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
- {
- PyErr_Clear ();
- throw_quit ("Quit");
- }
- gdbpy_print_stack ();
-}
-
/* This is the only publicly exported function in this file. FRAME
is the source frame to start frame-filter invocation. FLAGS is an
integer holding the flags for printing. The following elements of
@@ -1139,7 +1124,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
initialization error. This return code will trigger a
default backtrace. */
- throw_quit_or_print_exception ();
+ gdbpy_print_stack_or_quit ();
return EXT_LANG_BT_NO_FILTERS;
}
@@ -1162,7 +1147,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
{
if (PyErr_Occurred ())
{
- throw_quit_or_print_exception ();
+ gdbpy_print_stack_or_quit ();
return EXT_LANG_BT_ERROR;
}
break;
@@ -1196,7 +1181,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
/* Do not exit on error printing a single frame. Print the
error and continue with other frames. */
if (success == EXT_LANG_BT_ERROR)
- throw_quit_or_print_exception ();
+ gdbpy_print_stack_or_quit ();
}
return success;
diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c
index 469ae48..efef4f7 100644
--- a/gdb/python/py-unwind.c
+++ b/gdb/python/py-unwind.c
@@ -535,12 +535,7 @@ pyuw_sniffer (const struct frame_unwind *self, struct frame_info *this_frame,
{
/* If the unwinder is cancelled due to a Ctrl-C, then propagate
the Ctrl-C as a GDB exception instead of swallowing it. */
- if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
- {
- PyErr_Clear ();
- quit ();
- }
- gdbpy_print_stack ();
+ gdbpy_print_stack_or_quit ();
return 0;
}
if (pyo_unwind_info == Py_None)
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 1ac54f9..6a0d232 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -654,6 +654,7 @@ extern const struct language_defn *python_language;
int gdbpy_print_python_errors_p (void);
void gdbpy_print_stack (void);
+void gdbpy_print_stack_or_quit ();
void gdbpy_handle_exception () ATTRIBUTE_NORETURN;
gdbpy_ref<> python_string_to_unicode (PyObject *obj);
diff --git a/gdb/python/python.c b/gdb/python/python.c
index f790d48..3d0b0a0 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -1268,6 +1268,20 @@ gdbpy_print_stack (void)
}
}
+/* Like gdbpy_print_stack, but if the exception is a
+ KeyboardException, throw a gdb "quit" instead. */
+
+void
+gdbpy_print_stack_or_quit ()
+{
+ if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
+ {
+ PyErr_Clear ();
+ throw_quit ("Quit");
+ }
+ gdbpy_print_stack ();
+}
+
/* Return a sequence holding all the Progspaces. */