From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25246 invoked by alias); 22 Jan 2009 06:06:12 -0000 Received: (qmail 25236 invoked by uid 22791); 22 Jan 2009 06:06:10 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_12,J_CHICKENPOX_33,SARE_MSGID_LONG40,SPF_PASS,WEIRD_PORT X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.191) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 22 Jan 2009 06:06:02 +0000 Received: by ti-out-0910.google.com with SMTP id d10so3105144tib.12 for ; Wed, 21 Jan 2009 22:05:59 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.53.14 with SMTP id b14mr6532tia.37.1232604359511; Wed, 21 Jan 2009 22:05:59 -0800 (PST) In-Reply-To: <6D19CA8D71C89C43A057926FE0D4ADAA06CB132B@ecamlmw720.eamcs.ericsson.se> References: <6D19CA8D71C89C43A057926FE0D4ADAA06CB132B@ecamlmw720.eamcs.ericsson.se> Date: Thu, 22 Jan 2009 06:06:00 -0000 Message-ID: Subject: Re: Weird reverse problems From: teawater To: Marc Khouzam , Michael Snyder Cc: gdb@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2009-01/txt/msg00153.txt.bz2 Hi Marc, I had reproduced it. 13 printf("A\n"); (gdb) rn infrun: clear_proceed_status_thread (process 21364) infrun: proceed (addr=0xffffffff, signal=144, step=1) infrun: resume (step=1, signal=0), trap_expected=0 infrun: wait_for_inferior (treat_exec_as_sigtrap=0) infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0xb7f01af8 infrun: stepped into subroutine infrun: inserting step-resume breakpoint at 0xb7f01980 infrun: resume (step=0, signal=0), trap_expected=0 infrun: prepare_to_wait infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0xb7f01980 infrun: BPSTAT_WHAT_STEP_RESUME infrun: resume (step=1, signal=0), trap_expected=1 infrun: prepare_to_wait infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x80482f8 infrun: stepped into subroutine infrun: inserting step-resume breakpoint at 0x80482f8 infrun: resume (step=0, signal=0), trap_expected=0 infrun: prepare_to_wait infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x80482f8 infrun: BPSTAT_WHAT_STEP_RESUME infrun: resume (step=1, signal=0), trap_expected=1 infrun: prepare_to_wait infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x80483dc infrun: keep going infrun: resume (step=1, signal=0), trap_expected=0 infrun: prepare_to_wait infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x80483d5 infrun: stepping inside range [0x80483d5-0x80483e1] infrun: stop_stepping 11 sleep(0);//3 (gdb) I think this is a bug of reverse code in infrun.c. That is because it deal with plt not very well. Michael, could you please take a look at this bug? And I will try to deal with it too. :) Thanks, Hui On Thu, Jan 22, 2009 at 02:52, Marc Khouzam wrote: > 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 > > 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: > ... > (gdb) l > 1 #include > 2 #include > 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! > > > >