C++ release和debug之间调用堆栈的奇怪差异

C++ release和debug之间调用堆栈的奇怪差异,c++,callstack,C++,Callstack,我正在尝试遍历此示例程序的堆栈: #include <windows.h> void Func1() { Sleep(1000); } void Func2() { Sleep(1000); Func1(); } void Func3() { Sleep(1000); Func2(); } void main() { for (int i = 0; i < 100; i++) { Func3();

我正在尝试遍历此示例程序的堆栈:

#include <windows.h>

void Func1()
{
    Sleep(1000);
}

void Func2()
{
    Sleep(1000);
    Func1();
}

void Func3()
{
    Sleep(1000);
    Func2();
}

void main()
{
    for (int i = 0; i < 100; i++)
    {
        Func3();
    }
}
#包括
void Func1()
{
睡眠(1000);
}
void Func2()
{
睡眠(1000);
Func1();
}
void Func3()
{
睡眠(1000);
Func2();
}
void main()
{
对于(int i=0;i<100;i++)
{
Func3();
}
}
在调试模式下,我得到了您期望的结果。类似于:
睡眠
Func3
主要

在释放模式下(启用帧指针优化),我得到堆栈:
睡眠
主要


“main”和“sleep”之间的函数在发布运行中位于何处?

该函数是内联的。

我只需将“内联函数扩展”更改为“仅内联”(在VS2008中),就会出现缺少的函数。:)

它可能是由编译器内联的。记住:调用堆栈是一种特权,一旦启用优化,它就会被剥夺。(实际上,您可以简单地禁用FPO:)我知道,但实际上我正在尝试使用FPO调用堆栈。如果你有PDB,这是可行的,而这正是我试图做的。:)是的,它们是内联的。我只需将“内联函数扩展”更改为“仅内联”,就会出现缺少的函数。:)@Idov,你应该把它作为一个答案,然后接受它,这样人们就会知道解决方案是什么。