From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12732 invoked by alias); 22 Mar 2007 08:33:09 -0000 Received: (qmail 12720 invoked by uid 22791); 22 Mar 2007 08:33:08 -0000 X-Spam-Check-By: sourceware.org Received: from Unknown (HELO iceblock01.celunite.com) (66.220.2.179) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 22 Mar 2007 08:32:51 +0000 Received: from localhost (iceblock01.celunite.com [127.0.0.1]) by iceblock01.celunite.com (Postfix) with ESMTP id 0ECD1BFC20E; Thu, 22 Mar 2007 01:32:39 -0700 (PDT) Received: from iceblock01.celunite.com ([127.0.0.1]) by localhost (iceblock01.celunite.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id klhlhELqvrM1; Thu, 22 Mar 2007 01:32:38 -0700 (PDT) Received: from [192.168.100.141] (unknown [220.225.33.101]) (Authenticated sender: kunal.parmar@celunite.com) by iceblock01.celunite.com (Postfix) with ESMTP id 62F55BFC122; Thu, 22 Mar 2007 01:32:37 -0700 (PDT) Subject: Re: GDB infinite loop when stepping on "while (1) i++;" From: Kunal Parmar To: qinwei Cc: gdb@sourceware.org In-Reply-To: References: Content-Type: text/plain Date: Thu, 22 Mar 2007 08:33:00 -0000 Message-Id: <1174552530.5491.4.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.8.1 Content-Transfer-Encoding: 7bit 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: 2007-03/txt/msg00262.txt.bz2 Hi, On Thu, 2007-03-22 at 15:44 +0800, qinwei wrote: > Dears, problems are here: > > gcc -o t -gdwarf-2 tp_while1.c > gdb t > (gdb) b main > Breakpoint 1 at 0x8048350: file tp_while1.c, line 3. > (gdb) r > Starting program: /home/qinwei/GJ283/code/build_linux/debug-gdb/t > > Breakpoint 1, main () at tp_while1.c:3 > 3 int i = 10; > (gdb) n > 4 while (1) i++; > (gdb) n > > When program stops at "while (1) i++;", and printing "next" command will > cause gdb infinite loop. > The target are x86, score, or other? (gdb-6.6 release version) > > Is the reason that the following dwarf-2 info: > > "Special opcode 104: advance Address by 7 to 0x8048357 and Line by 1 to > 4" > "Advance PC by 7 to 804835e" > > which makes "while (1)" and "i++;" the same line number? And gdb will get > "stop_pc" from the range [0x8048357, 0x804835e] and will not stop? Yes. The command `next' is used to move to advance execution to the next line of the current function. > How to solve it? Thanks! Try using `nexti' of `stepi'. Cheers, Kunal > > int main (void) > { > int i = 10; > while (1) i++; > return 0; > } > > Line Number Statements: > Extended opcode 2: set Address to 0x8048334 > Special opcode 6: advance Address by 0 to 0x8048334 and Line by 1 to 2 > Advance PC by constant 17 to 0x8048345 > Special opcode 160: advance Address by 11 to 0x8048350 and Line by 1 to > 3 > Special opcode 104: advance Address by 7 to 0x8048357 and Line by 1 to 4 > Advance PC by 7 to 804835e > Extended opcode 1: End of Sequence > > 08048334
: > 8048334: 55 push %ebp > 8048335: 89 e5 mov %esp,%ebp > 8048337: 83 ec 08 sub $0x8,%esp > 804833a: 83 e4 f0 and $0xfffffff0,%esp > 804833d: b8 00 00 00 00 mov $0x0,%eax > 8048342: 83 c0 0f add $0xf,%eax > 8048345: 83 c0 0f add $0xf,%eax > 8048348: c1 e8 04 shr $0x4,%eax > 804834b: c1 e0 04 shl $0x4,%eax > 804834e: 29 c4 sub %eax,%esp > 8048350: c7 45 fc 0a 00 00 00 movl $0xa,0xfffffffc(%ebp) > 8048357: 8d 45 fc lea 0xfffffffc(%ebp),%eax > 804835a: ff 00 incl (%eax) > 804835c: eb f9 jmp 8048357 > 804835e: 90 nop > 804835f: 90 nop > > Best regards, > Qinwei > Mail qinwei@sunnorth.com.cn > Phone +86-010-62981668-2708 > Fax +86-010-62985972 -- Kunal Parmar Tools Team, Celunite Inc. (www.celunite.com)