From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fernando Nasser To: Andrew Cagney Cc: Michael Snyder , Fernando Nasser , Daniel Jacobowitz , gdb-patches@sourceware.cygnus.com Subject: Re: [RFA] Testsuite addition for x86 linux GDB and SIGALRM fix Date: Thu, 26 Jul 2001 07:14:00 -0000 Message-id: <3B60251A.E9726676@redhat.com> References: <200005192321.e4JNLEv13368@delius.kettenis.local> <3B3ABD6E.1040304@cygnus.com> <3B4A2056.4D58E307@cygnus.com> <20010709143406.A17003@nevyn.them.org> <3B4A2C7C.85C688C4@cygnus.com> <3B5F5218.5D55130E@cygnus.com> <3B5F595F.821DA2A5@redhat.com> <3B5F7700.6030407@cygnus.com> X-SW-Source: 2001-07/msg00646.html Andrew Cagney wrote: > > > Michael Snyder wrote: > > > >> > >> I must disagree. Often, when you reach this line and you > >> want to step into foo, you will not notice the call to bar > >> until it is too late and you have stepped into bar. > >> > >> When that happens, the only way to reach foo is to "finish" from > >> bar, and then step again. > >> > > > > > > As I have explained in this thread (one month ago), the single stepping > > caused by finish would stop as soon as foo is entered -- exactly the > > behavior you want. > > I think that would be very counter intuitive. The primatives are: > > o step executes instructions until you > leave the current line > (be it enter a function or reach a new > line) > 'step' should never leave you in the same line from where you've issued it. That is counter intuitive, even if you had a stop-finish in the middle. > o finish leaves the current function > (reducing the stack depth by one) Exactly. We are talking about a source line with 'foo (bar ())' on it. The problem (as I said one month ago) is that we do not have a "finishi' which could perfectly leave the program at the return point, without concerns of return value handling, source line numbers etc. But "finish" is a source level command and source level commands should not leave you in the middle of source lines. Once finished the call it was in it should either: 1) stop at the beginning of the next source level instruction -- the one after the call (remember, it is a source level command) 2) stop after the prolog of a subroutine if there is another call in the same originating upper level source line. When the user issues a "step" on 'foo (bar ())' source line, he/she may want to enter either bar() or foo(). We cannot know that, so we must stop at each one and he/she can go to the next by issuing "finish", i.e., "finish _this_ subroutine". When he/she doesn't want to stop anymore (i.e., bar() was the one they were interested into), a "next" can be used. -- Fernando Nasser Red Hat Canada Ltd. E-Mail: fnasser@redhat.com 2323 Yonge Street, Suite #300 Toronto, Ontario M4P 2C9