如何使用gdb进入while循环?

时间:2012-10-18 09:18:14

标签: c gdb

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

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

由于我希望理解dept中的指针,我想进入while循环,并了解while循环如何处理指针。

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

3 个答案:

答案 0 :(得分:4)

*比postfix ++更紧密。右侧++将最后应用,所以:

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

与:

相同
while (*d = *sc)
{
  d++;
  sc++;

gdb中跟踪修改要好得多。

<强>更新

不要像这样的OP编码!

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

最好选择上面提到的更清晰的替代方案,让编译器加扰代码。

答案 1 :(得分:3)

选项1: 按照Olaf Dietsche的建议查看assembly code debugging

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

选项3: 将程序重写为类似

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

这样您就可以放置断点并查看值的变化。

答案 2 :(得分:0)

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

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