Re: Is that a GDB bug?

Pedro Alves <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 10/12/2015 01:46 PM, Nancy wrote:
> Hi,
> 
> Why line 5 execute twice?   Is that a GDB bug?
> 
> debug.c :
>      1    int main()
>      2    {
>      3        int x;
>      4        x=0;
>      5        L1: switch(x) { case 0: x=1; goto L1;  case 1: if(x==0)
> goto L1; else break; }
>      6        x=2;
>      7    }
> 
> $ gcc -O0 -g debug.c -o debug
> $ gdb debug
> GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
> Copyright (C) 2014 Free Software Foundation, Inc.
> ....................
> Reading symbols from debug...done.
> (gdb) b 5
> Breakpoint 1 at 0x80483fa: file debug.c, line 5.
> (gdb) r
> Starting program: /mnt/hgfs/cygwin/tmp/debug
> 
> Breakpoint 1, main () at debug.c:5
> 5        L1: switch(x) { case 0: x=1; goto L1;  case 1: if(x==0) goto
> L1; else break; }
> (gdb) n

x starts as 0.  So the fist time, "goto L1" is executed.  That makes execution
flow back to the address where the breakpoint was inserted, so you get another
breakpoint hit:

> 
> Breakpoint 1, main () at debug.c:5
> 5        L1: switch(x) { case 0: x=1; goto L1;  case 1: if(x==0) goto
> L1; else break; }

It doesn't matter that "next" was in progress.  The breakpoint hit takes
priority.

> (gdb) n
> 6        x=2;
> 
> 

Thanks,
Pedro Alves
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.