在调试过程中会发现有些语句为的前面为浅灰色无法打断点,而有些变量在生存域内无法追踪,如下图
第33行定义的dSum在函数中无法追踪到其值,而第36行的函数无法选择断点。看起来很像编译器的bug
但其实出现原因是因为编译器对代码进行了优化,看上方汇编指令
可以发现在664这一行有一个比较指令r2与r0比较,对应的就是此判断语句,再看左边的寄存器
dSum的值没有存入scope而是被编译器优化,一直在r0寄存器中操作,比较,于是执行成功,进入if内函数
当时慕课听翁恺老师的c语言,听到老师随口一说编译器有优化功能,今天遇到这个邪门的事情突然想起,没想到确实是这样,真是学无止境啊