PR gdb/2424

* infrun.c (normal_stop) Move breakpoint_auto_delete further down
	to allow printing to 'see' real reason of stop. This fixes PR 2424.
	* breakpoint.c (bpdisp_texst): New function. The function takes over
	the role of bpstats static array in print_one_breakpoint_location.
	(print_it_typical): Print "Temporary breakpoint" instead
	of just "Breakpoint" when breakpoint is, well, temporary. For mi-like
	protocols, print disp field.
	(print_one_breakpoint_location): Removed bpdisps static definition.
	Call new bpstat_text function to get value for 'disp' field.
	(mention): Print "Temporary breakpoint" instead of just "Breakpoint".
This commit is contained in:
Aleksandar Ristovski 2008-04-15 14:32:12 +00:00
parent a5f245b565
commit 2cec12e55b
3 changed files with 43 additions and 13 deletions

View file

@ -1,3 +1,17 @@
2008-04-15 Aleksandar Ristovski <aristovski@qnx.com>
PR gdb/2424
* infrun.c (normal_stop) Move breakpoint_auto_delete further down
to allow printing to 'see' real reason of stop. This fixes PR 2424.
* breakpoint.c (bpdisp_texst): New function. The function takes over
the role of bpstats static array in print_one_breakpoint_location.
(print_it_typical): Print "Temporary breakpoint" instead
of just "Breakpoint" when breakpoint is, well, temporary. For mi-like
protocols, print disp field.
(print_one_breakpoint_location): Removed bpdisps static definition.
Call new bpstat_text function to get value for 'disp' field.
(mention): Print "Temporary breakpoint" instead of just "Breakpoint".
2008-04-15 Daniel Jacobowitz <dan@codesourcery.com>
* gnulib/Makefile.am, gnulib/m4/gnulib-cache.m4,

View file

@ -211,8 +211,16 @@ unlink_locations_from_global_list (struct breakpoint *bpt);
static int
is_hardware_watchpoint (struct breakpoint *bpt);
/* Prototypes for exported functions. */
static const char *
bpdisp_text (enum bpdisp disp)
{
/* NOTE: the following values are a part of MI protocol and represent
values of 'disp' field returned when inferior stops at a breakpoint. */
static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
return bpdisps[(int) disp];
}
/* Prototypes for exported functions. */
/* If FALSE, gdb will not use hardware support for watchpoints, even
if such is available. */
static int can_use_hw_watchpoints;
@ -2181,6 +2189,7 @@ print_it_typical (bpstat bs)
struct breakpoint *b;
const struct bp_location *bl;
struct ui_stream *stb;
int bp_temp = 0;
stb = ui_out_stream_new (uiout);
old_chain = make_cleanup_ui_out_stream_delete (stb);
/* bs->breakpoint_at can be NULL if it was a momentary breakpoint
@ -2194,15 +2203,22 @@ print_it_typical (bpstat bs)
{
case bp_breakpoint:
case bp_hardware_breakpoint:
bp_temp = bs->breakpoint_at->owner->disposition == disp_del;
if (bl->address != bl->requested_address)
breakpoint_adjustment_warning (bl->requested_address,
bl->address,
b->number, 1);
annotate_breakpoint (b->number);
if (bp_temp)
ui_out_text (uiout, "\nTemporary breakpoint ");
else
ui_out_text (uiout, "\nBreakpoint ");
if (ui_out_is_mi_like_p (uiout))
{
ui_out_field_string (uiout, "reason",
async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
}
ui_out_field_int (uiout, "bkptno", b->number);
ui_out_text (uiout, ", ");
return PRINT_SRC_AND_LOC;
@ -3412,8 +3428,6 @@ print_one_breakpoint_location (struct breakpoint *b,
{bp_catch_exec, "catch exec"}
};
static char *bpdisps[] =
{"del", "dstp", "dis", "keep"};
static char bpenables[] = "nynny";
char wrap_indent[80];
struct ui_stream *stb = ui_out_stream_new (uiout);
@ -3470,7 +3484,7 @@ print_one_breakpoint_location (struct breakpoint *b,
if (part_of_multiple)
ui_out_field_skip (uiout, "disp");
else
ui_out_field_string (uiout, "disp", bpdisps[(int) b->disposition]);
ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
/* 4 */
@ -4842,7 +4856,11 @@ mention (struct breakpoint *b)
say_where = 0;
break;
}
printf_filtered (_("Breakpoint %d"), b->number);
if (b->disposition == disp_del)
printf_filtered (_("Temporary breakpoint"));
else
printf_filtered (_("Breakpoint"));
printf_filtered (_(" %d"), b->number);
say_where = 1;
break;
case bp_hardware_breakpoint:

View file

@ -3132,11 +3132,6 @@ Further execution is probably impossible.\n"));
}
}
/* Delete the breakpoint we stopped at, if it wants to be deleted.
Delete any breakpoint that is to be deleted at the next stop. */
breakpoint_auto_delete (stop_bpstat);
/* If an auto-display called a function and that got a signal,
delete that auto-display to avoid an infinite recursion. */
@ -3275,6 +3270,9 @@ Further execution is probably impossible.\n"));
done:
annotate_stopped ();
observer_notify_normal_stop (stop_bpstat);
/* Delete the breakpoint we stopped at, if it wants to be deleted.
Delete any breakpoint that is to be deleted at the next stop. */
breakpoint_auto_delete (stop_bpstat);
}
static int