GDB意外的行为:在嵌套if(gdb unexpected behavior: in nested

2019-10-16 17:56发布

我在用

    p12user@ubuntu:~$ uname -a
    Linux ubuntu 2.6.32-40-generic #87-Ubuntu SMP Tue Mar 6 00:56:56 UTC 2012 x86_64 GNU/Linux

    p12user@ubuntu:~$ gdb -v
    GNU gdb (GDB) 7.1-ubuntu
    Copyright (C) 2010 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 "x86_64-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.

    p12user@ubuntu:~/programming$ gcc --version
    gcc (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
    Copyright (C) 2009 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在调试这个程序在gdb,其编译为gcc -g program.c

#include <stdio.h>
int main()
{
   int condition1 = 1;
   if(condition1)
   {
      if(!condition1)
      {
         printf("The control shouldn't come here.\n");
      }
   }
   else
   {
      printf("in else\n");
   }
   return 0;
}

该行为是:

Breakpoint 1, main () at program.c:4
4               int condition1 = 1;
(gdb) n
5               if(condition1)
(gdb) n
7                       if(!condition1)
(gdb) n
9                               printf("The control shouldn't come here.\n");
(gdb) n
16              return 0;
(gdb) n
17      }
(gdb) 

第9行的行为是在gdb意外。 但是,打印语句只在gdb显示,但不执行。 如果我把一个匹配ELSE(有一些打印语句)与内-IF则不会发生这种情况,如果也匹配ELSE为外-IF被删除则不会发生这种情况。 我失去了一些小事吗?

Answer 1:

确保你建立你的程序没有任何种类的优化,因为你已经所示的程序似乎是平凡优化的可导致源代码语句不做到可执行文件。

在GCC你会使用:

gcc -O0 ...

要么

g++ -O0 ...

为了这。



Answer 2:

2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
GNU gdb Fedora (6.8-37.el5)

没关系!



文章来源: gdb unexpected behavior: in nested if
标签: c gdb