diff options
author | Grace Sainsbury <graces@redhat.com> | 2002-08-23 20:49:38 +0000 |
---|---|---|
committer | Grace Sainsbury <graces@redhat.com> | 2002-08-23 20:49:38 +0000 |
commit | 81d0cc192bd2194024738af9cede8b472702107f (patch) | |
tree | 9cc0890aa987d514bb0cf341ec40b2b49dabde11 /gdb/breakpoint.c | |
parent | 0312286c94c3e88ca30ea61f5fe60e4fb24d0aa1 (diff) | |
download | gdb-81d0cc192bd2194024738af9cede8b472702107f.zip gdb-81d0cc192bd2194024738af9cede8b472702107f.tar.gz gdb-81d0cc192bd2194024738af9cede8b472702107f.tar.bz2 |
* infrun.c (normal_stop, proceed): Remove call to print_sys_errmsg
when breakpoints fail. Move general breakpoint error messages to
insert_breakpoints.
* breakpoint.c (insert_breakpoints): Change warnings when
breakpoints are nto inserted to specify the type. Remove call to
memory_error when hardware breakpoints can't be inserted. Remove
multiple calls to warning so all messages are sent to the user at
once.
(delete_breakpoints): Make insert error messsages more explicit.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 118 |
1 files changed, 92 insertions, 26 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 30b878d..0f498af 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -715,10 +715,22 @@ insert_breakpoints (void) int return_val = 0; /* return success code. */ int val = 0; int disabled_breaks = 0; + int hw_breakpoint_error = 0; + int process_warning = 0; static char message1[] = "Error inserting catchpoint %d:\n"; static char message[sizeof (message1) + 30]; +#ifdef ONE_PROCESS_WRITETEXT + process_warning = 1; +#endif + + struct ui_file *tmp_error_stream = mem_fileopen (); + make_cleanup_ui_file_delete (tmp_error_stream); + + /* Explicitly mark the warning -- this will only be printed if + there was an error. */ + fprintf_unfiltered (tmp_error_stream, "Warning:\n"); ALL_BREAKPOINTS_SAFE (b, temp) { @@ -776,8 +788,9 @@ insert_breakpoints (void) /* Set a software (trap) breakpoint at the LMA. */ val = target_insert_breakpoint (addr, b->shadow_contents); if (val != 0) - warning ("overlay breakpoint %d failed: in ROM?", - b->number); + fprintf_unfiltered (tmp_error_stream, + "Overlay breakpoint %d failed: in ROM?", + b->number); } } /* Shall we set a breakpoint at the VMA? */ @@ -810,22 +823,34 @@ insert_breakpoints (void) b->enable_state = bp_shlib_disabled; if (!disabled_breaks) { - target_terminal_ours_for_output (); - warning ("Cannot insert breakpoint %d:", b->number); - warning ("Temporarily disabling shared library breakpoints:"); + fprintf_unfiltered (tmp_error_stream, + "Cannot insert breakpoint %d.\n", b->number); + fprintf_unfiltered (tmp_error_stream, + "Temporarily disabling shared library breakpoints:\n"); } disabled_breaks = 1; - warning ("breakpoint #%d ", b->number); + fprintf_unfiltered (tmp_error_stream, "breakpoint #%d\n", b->number); } else #endif { - target_terminal_ours_for_output (); - warning ("Cannot insert breakpoint %d:", b->number); -#ifdef ONE_PROCESS_WRITETEXT - warning ("The same program may be running in another process."); -#endif - memory_error (val, b->address); /* which bombs us out */ + process_warning = 1; + if (b->type == bp_hardware_breakpoint) + { + hw_breakpoint_error = 1; + fprintf_unfiltered (tmp_error_stream, + "Cannot insert hardware breakpoint %d.\n", + b->number); + } + else + { + fprintf_unfiltered (tmp_error_stream, "Cannot insert breakpoint %d.\n", b->number); + fprintf_filtered (tmp_error_stream, "Error accessing memory address "); + print_address_numeric (b->address, 1, tmp_error_stream); + fprintf_filtered (tmp_error_stream, ": %s.\n", + safe_strerror (val)); + } + } } else @@ -852,9 +877,13 @@ insert_breakpoints (void) if (val) { /* Couldn't set breakpoint for some reason */ - target_terminal_ours_for_output (); - warning ("Cannot insert catchpoint %d; disabling it.", - b->number); + fprintf_unfiltered (tmp_error_stream, + "Cannot insert catchpoint %d; disabling it.\n", + b->number); + fprintf_filtered (tmp_error_stream, "Error accessing memory address "); + print_address_numeric (b->address, 1, tmp_error_stream); + fprintf_filtered (tmp_error_stream, ": %s.\n", + safe_strerror (val)); b->enable_state = bp_disabled; } else @@ -876,9 +905,9 @@ insert_breakpoints (void) if (val == -1) { /* something went wrong */ - target_terminal_ours_for_output (); - warning ("Cannot insert catchpoint %d; disabling it.", - b->number); + fprintf_unfiltered (tmp_error_stream, + "Cannot insert catchpoint %d; disabling it.\n", + b->number); b->enable_state = bp_disabled; } } @@ -955,7 +984,7 @@ insert_breakpoints (void) addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v); len = TYPE_LENGTH (VALUE_TYPE (v)); - type = hw_write; + type = hw_write; if (b->type == bp_read_watchpoint) type = hw_read; else if (b->type == bp_access_watchpoint) @@ -980,9 +1009,11 @@ insert_breakpoints (void) value chain brings us here. */ if (!b->inserted) { + process_warning = 1; remove_breakpoint (b, mark_uninserted); - warning ("Could not insert hardware watchpoint %d.", - b->number); + hw_breakpoint_error = 1; + fprintf_unfiltered (tmp_error_stream, + "Cannot insert hardware watchpoint %d.\n", b->number); val = -1; } } @@ -1029,8 +1060,7 @@ insert_breakpoints (void) } if (val < 0) { - target_terminal_ours_for_output (); - warning ("Cannot insert catchpoint %d.", b->number); + fprintf_unfiltered (tmp_error_stream, "Cannot insert catchpoint %d.", b->number); } else b->inserted = 1; @@ -1039,11 +1069,26 @@ insert_breakpoints (void) return_val = val; /* remember failure */ } } + + if (return_val) + { + /* If a hardware breakpoint or watchpoint was inserted, add a + message about possibly exhausted resources. */ + if (hw_breakpoint_error) + { + fprintf_unfiltered (tmp_error_stream, "Could not insert hardware breakpoints:\n" + "You may have requested too many hardware breakpoints/watchpoints.\n"); + } + if (process_warning) + fprintf_unfiltered (tmp_error_stream,"The same program may be running in another process."); + + target_terminal_ours_for_output (); + error_stream (tmp_error_stream); + } return return_val; } - int remove_breakpoints (void) { @@ -6681,11 +6726,32 @@ delete_breakpoint (struct breakpoint *bpt) else val = target_insert_breakpoint (b->address, b->shadow_contents); + /* If there was an error in the insert, print a message, then stop execution. */ if (val != 0) { + struct ui_file *tmp_error_stream = mem_fileopen (); + make_cleanup_ui_file_delete (tmp_error_stream); + + + if (b->type == bp_hardware_breakpoint) + { + fprintf_unfiltered (tmp_error_stream, + "Cannot insert hardware breakpoint %d.\n" + "You may have requested too many hardware breakpoints.\n", + b->number); + } + else + { + fprintf_unfiltered (tmp_error_stream, "Cannot insert breakpoint %d.\n", b->number); + fprintf_filtered (tmp_error_stream, "Error accessing memory address "); + print_address_numeric (b->address, 1, tmp_error_stream); + fprintf_filtered (tmp_error_stream, ": %s.\n", + safe_strerror (val)); + } + + fprintf_unfiltered (tmp_error_stream,"The same program may be running in another process."); target_terminal_ours_for_output (); - warning ("Cannot insert breakpoint %d:", b->number); - memory_error (val, b->address); /* which bombs us out */ + error_stream(tmp_error_stream); } else b->inserted = 1; |