This is the mail archive of the gdb@sourceware.org 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]

Weird reverse problems


Hi,

so I'm trying Reverse Debugging by having applied teawater's patches
on top of HEAD which contains Michael S reverse infrastructure.

I ran into some bizarre behavior when reverse stepping.
I found that with (I'm guessing) library functions, a reverse next
will skip a line.  If you look at the simple session I ran below
(a bit long, but very simple) you can see that on the reverse, 
every two printf gets skipped.
Also, on a reverse step, multiple sleep() can be skipped.

Weird no?

I tried to look at the code, but performing steps gets pretty
low level, so I gave up.

Thanks

Marc

GNU gdb (GDB) 6.8.50.20090113-cvs
Copyright (C) 2009 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 "i686-pc-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
(gdb) l
1       #include <stdio.h>
2       #include <unistd.h>
3
4       int foo(int i) {
5           return i;
6       }
7       int main()
8       {
9           sleep(0);//1
10          sleep(0);//2
(gdb) 
11          sleep(0);//3
12          sleep(0);//4
13          printf("A\n");
14          printf("B\n");
15          printf("C\n");
16          printf("D\n");
17          int a = 0;
18          a++;
19          printf("E\n");
20          printf("F\n");
(gdb) 
21          printf("G\n");
22          printf("H\n");
23          return a;
24      }
(gdb) b main
Breakpoint 1 at 0x80484bd: file a.cc, line 9.
(gdb) r
Starting program: /local/home/lmckhou/testing/a.out 

Breakpoint 1, main () at a.cc:9
9           sleep(0);//1
(gdb) record
(gdb) b 24
Breakpoint 2 at 0x804855b: file a.cc, line 24.
(gdb) c
Continuing.
A
B
C
D
E
F
G
H

Breakpoint 2, main () at a.cc:24
24      }
(gdb) rn
23          return a;
(gdb) rn
21          printf("G\n");    <--- Missed a printf here!
(gdb) rn
19          printf("E\n");    <--- Missed a printf here!
(gdb) rn
18          a++;
(gdb) rn
17          int a = 0;
(gdb) rn
15          printf("C\n");    <--- Missed a printf here!
(gdb) rn
13          printf("A\n");    <--- Missed a printf here!
(gdb) rn
11          sleep(0);//3    <--- Missed a sleep here!
(gdb) rn

No more reverse-execution history.
main () at a.cc:9
9           sleep(0);//1
(gdb) n
10          sleep(0);//2
(gdb) n
11          sleep(0);//3
(gdb) n
12          sleep(0);//4
(gdb) n
13          printf("A\n");
(gdb) rs
12          sleep(0);//4
(gdb) rs
11          sleep(0);//3
(gdb) rs
10          sleep(0);//2
(gdb) n
11          sleep(0);//3
(gdb) n
12          sleep(0);//4
(gdb) n
13          printf("A\n");
(gdb) n
14          printf("B\n");
(gdb) n
15          printf("C\n");
(gdb) rs
14          printf("B\n");
(gdb) 

No more reverse-execution history.
main () at a.cc:9
9           sleep(0);//1       <--- Woah, missed a bunch of stuff on the
reverse step!




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