Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: temp@sourceboost.com, gdb@sourceware.org
Subject: Re: Getting pissed off by gdb. Please help with stepping in.
Date: Thu, 18 Mar 2010 15:10:00 -0000	[thread overview]
Message-ID: <e394668d1003180810wc60e1b6w888973df227ccbc8@mail.gmail.com> (raw)
In-Reply-To: <E1NsBhj-0007rq-7D@fencepost.gnu.org>

On Thu, Mar 18, 2010 at 2:07 AM, Eli Zaretskii <eliz@gnu.org> wrote:
>> Date: Thu, 18 Mar 2010 00:22:20 -0700
>> From: Doug Evans <dje@google.com>
>> Cc: gdb@sourceware.org
>>
>> I agree it should work as you expect.  I don't see the step out of bar
>> continuing passed foo, but I do see it stepping into foo (as if you
>> had done two steps, so to speak: step out of bar and step into foo).
>> [This is with gdb 7.0 and cvs head.]
>> One *could* use `finish' to accomplish what you want but I think a
>> `step' at the end of the function should behave like `finish' (modulo
>> printing the return value of course).
>
> I'm confused: what exactly does this patch fix, i.e. what was the
> behavior before it and what it will be after it?
>
> My confusion stems from the fact that you first say that the problem
> described by the OP does not exist, i.e. GDB does _not_ continue past
> foo, but then you say something is wrong and suggest a fix.  What did
> I miss here?

Suppose we have this code:

int g;

int bar () { return 1; }

void foo (int x) { g = x; }

int
main ()
{
  foo (bar ());
  return 0;
}

And suppose we've stepped into `bar' during the setup for the call to `foo'.

(gdb) start
Temporary breakpoint 1 at 0x4003ad: file stepout.c, line 11.
Starting program: /home/dje/src/play/stepout.x64

Temporary breakpoint 1, main () at stepout.c:11
11        foo (bar ());
(gdb) s
bar () at stepout.c:4
4       int bar () { return 1; }
(gdb)

Now suppose the user does a "step" at this point.
There are several possibilities for what can happen, and that is what
we are discussing.
Here's what gdb 7.1 does:

(gdb) f
#0  bar () at stepout.c:4
4       int bar () { return 1; }
(gdb) s
foo (x=1) at stepout.c:6
6       void foo (int x) { g = x; }
(gdb)

Note that we've stepped out of bar and into foo.

Here is what Pavel is expecting instead:

(gdb) f
#0  bar () at stepout.c:4
4       int bar () { return 1; }
(gdb) s
0x00000000004003b7 in main () at stepout.c:11
11        foo (bar ());
(gdb)

[or some such. I cut-n-pasted that from a session with my patch
applied. IWBN to remove all those zeroes in 0x00000... of course]
Note that we've stepped out of bar but have not yet stepped into foo.

The behaviour Pavel describes in his message, but which I do not see, is this:

(gdb) f
#0  bar () at stepout.c:4
4       int bar () { return 1; }
(gdb) s
main () at stepout.c:12
12        return 0;
(gdb)

Note that we've stepped out of bar, into foo, and back out of foo.


  reply	other threads:[~2010-03-18 15:10 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-18  2:39 temp
2010-03-18  3:00 ` Hui Zhu
2010-03-18  3:03 ` Nathan Froyd
2010-03-18  7:22 ` Doug Evans
2010-03-18  9:07   ` Eli Zaretskii
2010-03-18 15:10     ` Doug Evans [this message]
2010-03-18 15:21       ` Pedro Alves
2010-03-18 18:33         ` Eli Zaretskii
2010-03-18 18:55           ` Pedro Alves
2010-03-18 19:38             ` Eli Zaretskii
2010-03-18 19:54               ` Mark Kettenis
2010-03-18 20:43                 ` Doug Evans
2010-03-18 20:51                   ` Michael Snyder
2010-03-18 21:17                     ` Pedro Alves
2010-03-18 21:12                 ` Eli Zaretskii
2010-03-18 23:37                 ` Paul Hilfinger
2010-03-19  9:51                 ` Richard Earnshaw
2010-03-19 10:41                   ` Mark Kettenis
2010-03-19 13:19                     ` Eli Zaretskii
2010-03-19 10:19                 ` André Pönitz
2010-03-18 15:28       ` Doug Evans
2010-03-18 18:31       ` Eli Zaretskii
2010-03-18 18:37         ` Paul Koning
2010-03-18 19:06           ` Doug Evans
2010-03-18 20:48             ` Jonas Maebe
2010-03-18 13:33   ` Daniel Jacobowitz
2010-03-18 14:06     ` André Pönitz
2010-03-18 14:13       ` Daniel Jacobowitz
2010-03-18 14:33         ` André Pönitz
2010-03-18 14:39           ` Daniel Jacobowitz
2010-03-18 14:54             ` André Pönitz
2010-03-18 15:40     ` Doug Evans
2010-03-18 17:41   ` Michael Snyder
2010-03-18 22:44 ` temp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e394668d1003180810wc60e1b6w888973df227ccbc8@mail.gmail.com \
    --to=dje@google.com \
    --cc=eliz@gnu.org \
    --cc=gdb@sourceware.org \
    --cc=temp@sourceboost.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox