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,你应该把它作为一个答案,然后接受它,这样人们就会知道解决方案是什么。