From 7f6a5dde442f1c824c4a559c3a3e819d80d91586 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 28 Feb 2013 19:25:42 +0000 Subject: [PATCH] * python/python.c (gdbpy_print_stack): Call begin_line and fprintf_filtered inside TRY_CATCH. --- gdb/ChangeLog | 5 +++++ gdb/python/python.c | 29 +++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e785983..8194eea 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2013-02-28 Tom Tromey + * python/python.c (gdbpy_print_stack): Call begin_line and + fprintf_filtered inside TRY_CATCH. + +2013-02-28 Tom Tromey + * python/python.c (gdbpy_find_pc_line): Call find_pc_line inside TRY_CATCH. diff --git a/gdb/python/python.c b/gdb/python/python.c index e2c19b3..405eb5b 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1043,6 +1043,8 @@ gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw) void gdbpy_print_stack (void) { + volatile struct gdb_exception except; + /* Print "none", just clear exception. */ if (gdbpy_should_print_stack == python_excp_none) { @@ -1055,7 +1057,10 @@ gdbpy_print_stack (void) /* PyErr_Print doesn't necessarily end output with a newline. This works because Python's stdout/stderr is fed through printf_filtered. */ - begin_line (); + TRY_CATCH (except, RETURN_MASK_ALL) + { + begin_line (); + } } /* Print "message", just error print message. */ else @@ -1068,17 +1073,21 @@ gdbpy_print_stack (void) /* Fetch the error message contained within ptype, pvalue. */ msg = gdbpy_exception_to_string (ptype, pvalue); type = gdbpy_obj_to_string (ptype); - if (msg == NULL) + + TRY_CATCH (except, RETURN_MASK_ALL) { - /* An error occurred computing the string representation of the - error message. */ - fprintf_filtered (gdb_stderr, - _("Error occurred computing Python error" \ - "message.\n")); + if (msg == NULL) + { + /* An error occurred computing the string representation of the + error message. */ + fprintf_filtered (gdb_stderr, + _("Error occurred computing Python error" \ + "message.\n")); + } + else + fprintf_filtered (gdb_stderr, "Python Exception %s %s: \n", + type, msg); } - else - fprintf_filtered (gdb_stderr, "Python Exception %s %s: \n", - type, msg); Py_XDECREF (ptype); Py_XDECREF (pvalue); -- 2.7.4