发布和调试之间调用栈的奇怪差异

Weird difference in callstack between release and debug

本文关键字:调用 调试 之间      更新时间:2023-10-16

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

#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();
    }
}

在调试模式下,我得到你所期望的。比如:
睡眠
Func3
主要

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

在发布运行中,"main"answers"sleep"之间的函数去了哪里?

函数被内联。
我只是将"内联函数扩展"更改为Only_inline(在VS2008中),然后出现了缺失的函数。:)