From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22320 invoked by alias); 22 Jan 2009 09:02:28 -0000 Received: (qmail 21574 invoked by uid 22791); 22 Jan 2009 09:02:26 -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.188) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 22 Jan 2009 09:02:22 +0000 Received: by ti-out-0910.google.com with SMTP id d10so3127151tib.12 for ; Thu, 22 Jan 2009 01:02:19 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.43.18 with SMTP id q18mr1661105tiq.14.1232614939361; Thu, 22 Jan 2009 01:02:19 -0800 (PST) In-Reply-To: References: <6D19CA8D71C89C43A057926FE0D4ADAA06CB132B@ecamlmw720.eamcs.ericsson.se> Date: Thu, 22 Jan 2009 09:02: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/msg00155.txt.bz2 Hi, I make a patch for it in http://sourceware.org/ml/gdb-patches/2009-01/msg00444.html Thanks, Hui On Thu, Jan 22, 2009 at 14:05, teawater wrote: > 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! >> >> >> >> >