This is the mail archive of the gdb@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: Multiple breakpoint locations


Eli Zaretskii wrote:

>> Date: Tue, 13 Nov 2007 15:39:31 -0800
>> From: "Douglas Evans" <dje@google.com>
>> Cc: "Vladimir Prus" <ghost@cs.msu.su>, gdb@sources.redhat.com
>> 
>> On Nov 13, 2007 2:18 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>> > > From:  Vladimir Prus <ghost@cs.msu.su>
>> > > Date:  Tue, 13 Nov 2007 22:28:15 +0300
>> > >
>> > > >   (gdb) d 1.1
>> > > >   warning: bad breakpoint number at or near '1.1'
>> > >
>> > > Well, you can't really delete a location -- if breakpoint expression
>> > > corresponds to 20 addresses, that's the way it is -- you cannot
>> > > delete some of those addresses from the program ;-)
>> >
>> > Sorry, I don't understand why; can you please elaborate?  Removing a
>> > breakpoint instruction from a specific address is a primitive
>> > operation of the target back-end; why can't we use it for that single
>> > address?

Because after that, the output of 'info break' will no longer correspond
accurately to what the program is. If there are 20 locations in program,
and 'info break' shows 20 locations, it means the user sees *all* locations.
He can disable some of them, and then he'll see that some of locations
are disabled. If you allow removing a location, it means the list of location
starts to show all locations except for previously removed ones, and there's
no way to investigate which removed locations were there, how many are
removed and so on. It seems to be that disabling undesired locations
is more transparent approach.

>> I think it's a question of how much complexity one wants here.  AIUI,
>> the breakpoint is represented as source+line.  One would have to
>> augment that to mean source+line+except-this (I think).
> 
> Not necessarily.  You could look up the struct bp_location that
> corresponds to 1.1 (by using its address as a key), and remove that
> struct bp_location from the chain we maintain for breakpoint 1.
> 
>> Also, it's not just "delete 1.1".  It's also condition, commands, and
>> ignore.
> 
> Well, removing struct bp_location should take care of that as well.
> Am I missing something?
> 
>> I'm not suggesting all (or any) should be supported, just that we
>> shouldn't tackle any of them without thinking the big picture
>> through at least a bit.
> 
> Well, my big picture is that today we have no solution for the
> following use case: (a) I set a breakpoint that results in multiple
> locations; (b) I look at "info break" and realize that some of these
> locations are irrelevant for the problem I'm debugging, and I don't
> want the program to stop there (e.g., maybe stopping there will
> disrupt some timing); (c) I want to remove these locations from the
> breakpoints list.

You disable those locations, and gdb no longer stops there. And GDB, furthermore,
will try hard to keep those locations disabled as shared libraries are 
loaded and unloaded.

- Volodya







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