C 如何使用gdb进入while循环?

C 如何使用gdb进入while循环?,c,gdb,C,Gdb,我有一个while循环,如下所示 while (*d++ = *sc++) 由于我希望了解dept中的指针,我希望进入while循环,并了解while循环如何使用指针 我在gdb中使用了step,但它没有完全进入while循环。有没有办法进入while循环,了解每一步的操作 *绑定比后缀更紧密++++将最后应用,因此: while (*d++ = *sc++) 同: while (*d = *sc) { d++; sc++; 修改最好在gdb中跟踪 更新: 不要像这样编写代码 虽然

我有一个
while
循环,如下所示

while (*d++ = *sc++)
由于我希望了解dept中的指针,我希望进入
while
循环,并了解
while
循环如何使用指针


我在
gdb
中使用了
step
,但它没有完全进入
while
循环。有没有办法进入
while
循环,了解每一步的操作

*
绑定比后缀更紧密
++
<右侧的代码>++将最后应用,因此:

while (*d++ = *sc++)
同:

while (*d = *sc)
{
  d++;
  sc++;
修改最好在
gdb
中跟踪

更新:

不要像这样编写代码

虽然看起来很酷,证明你很聪明。它很难被普通人脑解析,因此容易出错?我们不想要的,是吗

最好选择上面建议的更清晰的替代方案,让编译器扰乱代码。

选项1: 按照奥拉夫·迪奇(Olaf Dietsche)的建议,调查这一问题

备选案文2: 使用
gcc-S test.c
在汇编后停止编译器,以查看程序的汇编代码。理解汇编代码可能有点难。更多信息

备选案文3: 将您的程序重写为

while(1)
{
    if(*d++ != *sc++)
    {
        break;
    }
}

因此,您可以放置断点并查看值的变化。

另一种编写代码的相同方法是:

*d = *sc;
while (*d > 0)
{
  d++;
  sc++;
  *d = *sc;
}

您需要查看汇编代码。看:我尝试了第三种选择,但仍然没有被说服。我认为我需要深入研究,我认为深入理解的最好方法是选择1。我完全同意。一句名言完美地概括了这一点:
“调试的难度是一开始编写代码的两倍。因此,如果你尽可能聪明地编写代码,根据定义,你就没有足够的智慧来调试它。”-布赖恩·克尼汉
@Lundin,是不是和他书中写的克林厄姆一样“有经验的C程序员更喜欢<代码>while(*s++=*t++)。。。虽然乍一看这似乎有些晦涩,但符号的便利性是相当大的,应该掌握这个习语,因为你会在C程序中经常看到它。”(有点意译为“C编程语言”,第5.5节)“?@ugoren确实,他自己对正确的编码风格一无所知,因为在K&R书的编写过程中,正确的编码风格甚至都没有被发明出来。那本书中充斥着非常糟糕的编码风格示例。因此,你必须将他的陈述解读为”自70年代中期以来一直处于昏迷状态、刚刚醒来的经验丰富的C程序员更喜欢……”克里特人Epimenides说,所有克里特人都是骗子,克里特人所做的所有其他陈述都是谎言。这是谎言吗?”(伯特兰·罗素:《基于类型理论的数理逻辑》[);-)@Ugorenyway,@Lundin的Kerringham当然比我的Kerringham更懂编程。