This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]