mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
2011-03-21 Phil Muldoon <pmuldoon@redhat.com>
PR python/12183 * python/py-function.c (fnpy_call): Treat GdbErrors differently to other error classes. Do not print stack trace. 2011-03-21 Phil Muldoon <pmuldoon@redhat.com> PR python/12183 * gdb.python/py-function.exp: Add GdbError tests.
This commit is contained in:
parent
07aead7b67
commit
057758407c
@ -1,3 +1,10 @@
|
||||
2011-03-22 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
PR python/12183
|
||||
|
||||
* python/py-function.c (fnpy_call): Treat GdbErrors differently to
|
||||
other error classes. Do not print stack trace.
|
||||
|
||||
2011-03-21 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* dwarf2read.c (producer_is_gxx_lt_4_6): New function.
|
||||
|
@ -79,8 +79,55 @@ fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language,
|
||||
|
||||
if (!result)
|
||||
{
|
||||
gdbpy_print_stack ();
|
||||
error (_("Error while executing Python code."));
|
||||
PyObject *ptype, *pvalue, *ptraceback;
|
||||
char *msg;
|
||||
|
||||
PyErr_Fetch (&ptype, &pvalue, &ptraceback);
|
||||
|
||||
/* Try to fetch an error message contained within ptype, pvalue.
|
||||
When fetching the error message we need to make our own copy,
|
||||
we no longer own ptype, pvalue after the call to PyErr_Restore. */
|
||||
|
||||
msg = gdbpy_exception_to_string (ptype, pvalue);
|
||||
make_cleanup (xfree, msg);
|
||||
|
||||
if (msg == NULL)
|
||||
{
|
||||
/* An error occurred computing the string representation of the
|
||||
error message. This is rare, but we should inform the user. */
|
||||
|
||||
printf_filtered (_("An error occurred in a Python "
|
||||
"convenience function\n"
|
||||
"and then another occurred computing the "
|
||||
"error message.\n"));
|
||||
gdbpy_print_stack ();
|
||||
}
|
||||
|
||||
/* Don't print the stack for gdb.GdbError exceptions.
|
||||
It is generally used to flag user errors.
|
||||
|
||||
We also don't want to print "Error occurred in Python command"
|
||||
for user errors. However, a missing message for gdb.GdbError
|
||||
exceptions is arguably a bug, so we flag it as such. */
|
||||
|
||||
if (!PyErr_GivenExceptionMatches (ptype, gdbpy_gdberror_exc)
|
||||
|| msg == NULL || *msg == '\0')
|
||||
{
|
||||
PyErr_Restore (ptype, pvalue, ptraceback);
|
||||
gdbpy_print_stack ();
|
||||
if (msg != NULL && *msg != '\0')
|
||||
error (_("Error occurred in Python convenience function: %s"),
|
||||
msg);
|
||||
else
|
||||
error (_("Error occurred in Python convenience function."));
|
||||
}
|
||||
else
|
||||
{
|
||||
Py_XDECREF (ptype);
|
||||
Py_XDECREF (pvalue);
|
||||
Py_XDECREF (ptraceback);
|
||||
error ("%s", msg);
|
||||
}
|
||||
}
|
||||
|
||||
value = convert_value_from_python (result);
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-03-22 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
PR python/12183
|
||||
|
||||
* gdb.python/py-function.exp: Add GdbError tests.
|
||||
|
||||
2011-03-18 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* gdb.trace/unavailable.cc (args_test_func, local_test_func)
|
||||
|
@ -69,3 +69,29 @@ gdb_py_test_multiple "input int-returning function" \
|
||||
|
||||
gdb_test "print \$yes() && \$yes()" " = 1" "call yes with &&"
|
||||
gdb_test "print \$yes() || \$yes()" " = 1" "call yes with ||"
|
||||
|
||||
gdb_py_test_multiple "Test GDBError" \
|
||||
"python" "" \
|
||||
"class GDBError(gdb.Function):" "" \
|
||||
" def __init__(self):" "" \
|
||||
" gdb.Function.__init__(self, 'gdberror')" "" \
|
||||
" def invoke(self):" "" \
|
||||
" raise gdb.GdbError(\"This is a GdbError\")" "" \
|
||||
"GDBError ()" "" \
|
||||
"end" ""
|
||||
|
||||
gdb_test "print \$gdberror()" "This is a GdbError.*" \
|
||||
"Test GdbError. There should not be a stack trace"
|
||||
|
||||
gdb_py_test_multiple "Test Normal Error" \
|
||||
"python" "" \
|
||||
"class NormalError(gdb.Function):" "" \
|
||||
" def __init__(self):" "" \
|
||||
" gdb.Function.__init__(self, 'normalerror')" "" \
|
||||
" def invoke(self):" "" \
|
||||
" raise RuntimeError(\"This is a Normal Error\")" "" \
|
||||
"NormalError ()" "" \
|
||||
"end" ""
|
||||
|
||||
gdb_test "print \$normalerror()" "Traceback.*File.*line 5.*in invoke.*RuntimeError.*This is a Normal Error.*" \
|
||||
"Test a Runtime error. There should be a stack trace."
|
||||
|
Loading…
Reference in New Issue
Block a user