gdb
* varobj.c (value_get_print_value): Rearrange. Pass stream to apply_varobj_pretty_printer. * c-lang.c: Include exceptions.h. (c_get_string): Throw MEMORY_ERROR when appropriate. * python/py-prettyprint.c (enum string_repr_result): New. (print_stack_unless_memory_error): New function. (print_string_repr): Change return type. Use print_stack_unless_memory_error. (print_children): Use print_stack_unless_memory_error. (apply_val_pretty_printer): Update. Don't print children if string representation threw an exception. (apply_varobj_pretty_printer): Add 'stream' argument. Use print_stack_unless_memory_error. * python/python.c (gdbpy_gdb_error, gdbpy_gdb_memory_error): New globals. (_initialize_python): Initialize them. * python/python-internal.h (GDB_PY_HANDLE_EXCEPTION): Use gdbpy_convert_exception. (GDB_PY_SET_HANDLE_EXCEPTION): Likewise. (gdbpy_gdb_error, gdbpy_gdb_memory_error): Declare. (gdbpy_convert_exception): Declare. (apply_varobj_pretty_printer): Update. * python/py-utils.c (gdbpy_convert_exception): New function. gdb/doc * gdb.texinfo (Basic Python): Update. Add xref. (Exception Handling): Document new exception classes. (Types In Python): Update. (Frames In Python): Update. gdb/testsuite * gdb.python/py-prettyprint.c (main): Add new 'ns2' local. * gdb.python/py-prettyprint.exp (run_lang_tests): Add test for MemoryError. * gdb.python/python.exp (gdb_py_test_multiple): Update exception type. * gdb.python/py-value.exp (test_value_in_inferior): Add test for MemoryError. (test_subscript_regression): Update exception type.
This commit is contained in:
parent
f1b9e6e7ee
commit
621c83642d
14 changed files with 223 additions and 58 deletions
15
gdb/c-lang.c
15
gdb/c-lang.c
|
@ -35,6 +35,7 @@
|
|||
#include "cp-support.h"
|
||||
#include "gdb_obstack.h"
|
||||
#include <ctype.h>
|
||||
#include "exceptions.h"
|
||||
|
||||
extern void _initialize_c_language (void);
|
||||
|
||||
|
@ -698,13 +699,19 @@ c_get_string (struct value *value, gdb_byte **buffer, int *length,
|
|||
}
|
||||
else
|
||||
{
|
||||
err = read_string (value_as_address (value), *length, width, fetchlimit,
|
||||
byte_order, buffer, length);
|
||||
CORE_ADDR addr = value_as_address (value);
|
||||
|
||||
err = read_string (addr, *length, width, fetchlimit,
|
||||
byte_order, buffer, length);
|
||||
if (err)
|
||||
{
|
||||
xfree (*buffer);
|
||||
error (_("Error reading string from inferior: %s"),
|
||||
safe_strerror (err));
|
||||
if (err == EIO)
|
||||
throw_error (MEMORY_ERROR, "Address %s out of bounds",
|
||||
paddress (get_type_arch (type), addr));
|
||||
else
|
||||
error (_("Error reading string from inferior: %s"),
|
||||
safe_strerror (err));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue