* python/python.c (gdbpy_print_stack): Call begin_line and

fprintf_filtered inside TRY_CATCH.
This commit is contained in:
Tom Tromey 2013-02-28 19:25:42 +00:00
parent 9e974e552d
commit 7f6a5dde44
2 changed files with 24 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2013-02-28 Tom Tromey <tromey@redhat.com>
* python/python.c (gdbpy_print_stack): Call begin_line and
fprintf_filtered inside TRY_CATCH.
2013-02-28 Tom Tromey <tromey@redhat.com> 2013-02-28 Tom Tromey <tromey@redhat.com>
* python/python.c (gdbpy_find_pc_line): Call find_pc_line * python/python.c (gdbpy_find_pc_line): Call find_pc_line

View File

@ -1043,6 +1043,8 @@ gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw)
void void
gdbpy_print_stack (void) gdbpy_print_stack (void)
{ {
volatile struct gdb_exception except;
/* Print "none", just clear exception. */ /* Print "none", just clear exception. */
if (gdbpy_should_print_stack == python_excp_none) 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. /* PyErr_Print doesn't necessarily end output with a newline.
This works because Python's stdout/stderr is fed through This works because Python's stdout/stderr is fed through
printf_filtered. */ printf_filtered. */
begin_line (); TRY_CATCH (except, RETURN_MASK_ALL)
{
begin_line ();
}
} }
/* Print "message", just error print message. */ /* Print "message", just error print message. */
else else
@ -1068,17 +1073,21 @@ gdbpy_print_stack (void)
/* Fetch the error message contained within ptype, pvalue. */ /* Fetch the error message contained within ptype, pvalue. */
msg = gdbpy_exception_to_string (ptype, pvalue); msg = gdbpy_exception_to_string (ptype, pvalue);
type = gdbpy_obj_to_string (ptype); type = gdbpy_obj_to_string (ptype);
if (msg == NULL)
TRY_CATCH (except, RETURN_MASK_ALL)
{ {
/* An error occurred computing the string representation of the if (msg == NULL)
error message. */ {
fprintf_filtered (gdb_stderr, /* An error occurred computing the string representation of the
_("Error occurred computing Python error" \ error message. */
"message.\n")); 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 (ptype);
Py_XDECREF (pvalue); Py_XDECREF (pvalue);