This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] Add visible flag to breakpoints.
On Thursday 30 September 2010 17:18:15, Phil Muldoon wrote:
> The original patch I wrote did use negative numbers for bp_breakpoint
> type (in fact that patch is a commit in the archer branch:
> archer-pmuldoon-python-breakpoints). But normal bp_breakpoints with a
> negative number are still displayed with 'info breakpoints'. Currently
> the visibility of breakpoints is not decided on their number but their
> type.
> breakpoint_1 tests for these in user_settable_breakpoint.
I think that's just cruft and can be replaced by a b->number < 0 check?
> All I
> did in that aspect was to add an additional check for
> breakpoint_visible. I decided that if displaying the breakpoint was
> just an arbitrary check that I would introduce a visible flag and avoid
> all the re-plumbing of numbers/negative numbers in create_breakpoint.
> The plumbing would have been necessary because ...
>
> I also did look at create_internal_breakpoint, but those work on
> a single address. We would either have the user translate the breakpoint to an
> address with calls to decode_line or do it ourselves. I felt that a
> flag would be better here than to duplicate this effort. Also there are
> several cases/detections in generic bp_breakpoints that might be
> useful for users of Python breakpoints. And finally to substantially change the
> breakpoint mechanics underneath the call for a Python breakpoint purely
> because one was created visible and the other not seemed counter-intuitive.
I'm not sure what large effort you're thinking this entails.
You've carried the "visible" flag as argument all the way down to
create_breakpoint_sal already. So instead of:
@@ -6961,6 +6973,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
b->enable_state = enabled ? bp_enabled : bp_disabled;
b->disposition = disposition;
b->pspace = sals.sals[0].pspace;
+ b->visible = visible;
You change this:
b = set_raw_breakpoint (gdbarch, sal, type);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
to:
b = set_raw_breakpoint (gdbarch, sal, type);
if (visible /* or some other name, user? !internal? */)
{
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
}
else
{
b->number = internal_breakpoint_number--;
}
and you're golden. What am I missing?
--
Pedro Alves