我在一个项目中维护我们自己的堆栈爬虫(出于各种原因)。 我们需要能够以一定的可靠性抓取堆栈。 目前,我们遇到了一个问题,即函数尾部调用了我们感兴趣的函数,并且我们的堆栈跟踪跳过了将出现在debugging版本(/ Od)中的一帧。 我们已经禁用帧指针优化和内联(/ Oy-和/ Ob0),所以我们可以得到更好的堆栈跟踪,但是我们仍然希望能够打开一些优化(/ O1)来使代码更快。 但是,尾部调用仍然会干扰我们的堆栈跟踪。
有没有任何标志或设置将禁用MSVC中的这种优化? 海湾合作委员会有-f(不 – )优化,兄弟电话,涵盖了这一点。
不,你可能会把你的尾巴调用函数放在一个单独的编译模块中,但是只有在没有优化的情况下才能编译它。