This is the mail archive of the gdb-patches@sources.redhat.com 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: [RFA/PATCH] breakpoint.c: fix until command


Michael Snyder writes:
 > > > You raise a good point.  The commands "until <line>" and "until <func>"
 > > > are inconsistant.  Moreover the docs do not seem to describe this
 > > > recursion behavior.  Maybe a conversation with a wider audience is
 > > > in order (the gdb list)?  I'm sure I can't be the only one who
 > > > remembers that "until" behaved this way, and we shouldn't change
 > > > the behavior precipitously.
 > > 
 > > Am I the only one getting the feeling that we have two useful behaviors
 > > here; and that we should pick one for "until" but expose the other
 > > under some other name or with some option?
 > 
 > ;-)  That's often the case when someone feels 'intuitively' that 
 > gdb should behave differently.  We have to look out for feeping
 > creaturitis, but in this case I'm getting the impression that the
 > two behaviors are mutually incompatible, and may need to be separated
 > somehow.
 > 
 > If you say "until <line>", and the line is inside the current function,
 > you can impose the frame restriction.  If the line (or address) is outside 
 > the current function, or if you give a function name or something else, 
 > you can't.  And I don't think we can code that distinction at runtime.

I think we should come up with a behavior matrix, something like:

until: 
 continue until next source line is reached. If already at the last line
 of current function, continue until current frame pops.

until line:
 a. line in current function (1) --> continue until the line is reached.
 b. line in function in inner frame --> continue until the line is reached.
 c. line in function not in inner frame --> continue until current frame pops.

(1) However if current function is recursive, a. should become like
    b. But we want to enforce a different behavior, because we don't
    want to stop in the inner frame. --> this is the main problem,
    because the condition is basically impossible to figure out at run
    time.

until funcname:
 d. funcname called from current frame (2) --> continue until func is reached
 e. funcname not called from current frame --> cont until current frame pops.

(2) if current function is recursive and funcame == current function
    we want to stop at the next inner invocation of funcname


The 'continue until current frame pops' behavior is already there. It
always puts another bp_until at the caller.


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