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更懂编程。