This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Weird reverse problems
- From: "Marc Khouzam" <marc dot khouzam at ericsson dot com>
- To: <gdb at sourceware dot org>
- Date: Wed, 21 Jan 2009 13:52:40 -0500
- Subject: 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!