CMakeList.txt中默认:
set(CMAKE_BUILD_TYPE "Release") # "Release" or "Debug"
这导致生成的代码是开O2优化的,部分函数的调用直接被优化掉了。直接导致了练习7,8,9中无法正常观测函数栈。
虽然部分代码前加了
__attribute__ ((optimize("O1")))
不过不知道为啥我在Release下即便加了这些特殊声明还是被都被整成了O2级优化。
经过测试后发现只要把CMAKE_BUILD_TYPE改为Debug就可以避免O2级优化,正常观测函数栈了。