Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Ender Dai <xdai@uoregon.edu>
To: "Abid\, Hafiz" <Hafiz_Abid@mentor.com>
Cc: "gdb\@sourceware.org" <gdb@sourceware.org>
Subject: Re: gdb behavior on tight loop
Date: Wed, 24 Jul 2013 17:25:00 -0000	[thread overview]
Message-ID: <87mwpbq3a8.fsf@cortana.d.cs.uoregon.edu> (raw)
In-Reply-To: <EB3B29AD43CA924DA27099BC85192376E065C0FB@EU-MBX-02.mgc.mentorg.com>	(Hafiz Abid's message of "Wed, 24 Jul 2013 12:23:40 +0000")

"Abid, Hafiz" <Hafiz_Abid@mentor.com> writes:

>> 
>> I just find some counterintuitive (to me) behavior of gdb on tight loop.
>> Please see the gdb session below. When I run "next" on line 5, the tight
>> loop, it will take several seconds before gdb stop on line 6 and I regain
>> control. Strace shows that it looks like gdb is doing some magic in every
>> iteration.
>> 
>> If I set an additional breackpoint on line 6, and "continue" on line 5 instead
>> of "next", everything looks good.
>> 
>> Is this supposed behavior? What is gdb doing undercover?
> For 'next', GDB keeps doing low level step until It goes out of the range of current line.
> When you issue next on line 5, GDB steps one instruction and checks the PC. It will keep doing steps until PC is out of the
> Range of line 5 [0x4004b8-0x4004cd]. It is stopping after every instruction and then checking PC that is taking the time.
>

Thanks, this makes sense.

> 5	  for (i=0; i<100000; i++);
>    0x00000000004004b8 <+4>:	movl   $0x0,-0x4(%rbp)
>    0x00000000004004bf <+11>:	jmp    0x4004c5 <main+17>
>    0x00000000004004c1 <+13>:	addl   $0x1,-0x4(%rbp)
>    0x00000000004004c5 <+17>:	cmpl   $0x1869f,-0x4(%rbp)
>    0x00000000004004cc <+24>:	jle    0x4004c1 <main+13>
> 6	    return 0;
>    0x00000000004004ce <+26>:	mov    $0x0,%eax 
>
> You can get more details of what GDB is doing undercover using "set debug infrun 1" command.
>

Good to know that. It helps.

>> 
>> $ gdb a.out
>> GNU gdb (GDB) 7.6 (Debian 7.6-5)
>> Copyright (C) 2013 Free Software Foundation, Inc.
>> License GPLv3+: GNU GPL version 3 or later
>> <http://gnu.org/licenses/gpl.html>
>> This is free software: you are free to change and redistribute it.
>> There is NO WARRANTY, to the extent permitted by law.  Type "show
>> copying"
>> and "show warranty" for details.
>> This GDB was configured as "x86_64-linux-gnu".
>> For bug reporting instructions, please see:
>> <http://www.gnu.org/software/gdb/bugs/>...
>> Reading symbols from /home/ender/src/tmp/a.out...done.
>> (gdb) l
>> 1     int
>> 2     main(void)
>> 3     {
>> 4       int i;
>> 5       for (i=0; i<100000; i++);
>> 6       return 0;
>> 7     }
>> (gdb) b 5
>> Breakpoint 1 at 0x4004b1: file loop.c, line 5.
>> (gdb) r
>> Starting program: /home/xdai/src/tmp/a.out
>> warning: no loadable sections found in added symbol-file system-supplied
>> DSO at 0x7ffff7ffa000
>> warning: Could not load shared library symbols for linux-vdso.so.1.
>> Do you need "set solib-search-path" or "set sysroot"?
>> 
>> Breakpoint 1, main () at loop.c:5
>> 5      for (i=0; i<100000; i++);
>> (gdb) n
>> 6      return 0;
>> (gdb)
>> 
>> $ uname -a
>> Linux cortana 3.9-1-amd64 #1 SMP Debian 3.9.8-1 x86_64 GNU/Linux
>> 
>> $ gcc -v
>> Using built-in specs.
>> COLLECT_GCC=gcc
>> COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
>> Target: x86_64-linux-gnu
>> Configured with: ../src/configure -v --with-pkgversion='Debian 4.8.1-7'
>> --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs
>> --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr
>> --program-suffix=-4.8 --enable-shared --enable-linker-build-id --
>> libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
>> --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --
>> with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-
>> libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-
>> zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-
>> java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre
>> --enable-java-home
>> --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64
>> --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64
>> --with-arch-directory=amd64
>> --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-
>> multiarch --with-arch-32=i586 --with-abi=m64
>> --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-
>> checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --
>> target=x86_64-linux-gnu Thread model: posix gcc version 4.8.1 (Debian 4.8.1-
>> 7)


  reply	other threads:[~2013-07-24 17:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-24  3:51 Ender Dai
2013-07-24 12:23 ` Abid, Hafiz
2013-07-24 17:25   ` Ender Dai [this message]
2013-07-24 21:17     ` John Gilmore

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=87mwpbq3a8.fsf@cortana.d.cs.uoregon.edu \
    --to=xdai@uoregon.edu \
    --cc=Hafiz_Abid@mentor.com \
    --cc=gdb@sourceware.org \
    /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