发布和调试之间调用栈的奇怪差异
Weird difference in callstack between release and debug
我正在尝试遍历这个示例程序的堆栈:
#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中),然后出现了缺失的函数。:)
相关文章:
- OpenCV 3 Visual Studio 2017 调试,调用堆栈没有.pdb文件
- 从Excel VBA调用C++DLL只能从Visual Studio中的调试实例工作
- 在C++中调用 free() 会触发 ntdll!DbgBreakPoint() 在调试中,但在发布中崩溃
- 有没有办法调试排队等待对象的Qt插槽调用
- 调试"在抛出 ..) 实例后终止调用",当异常 _should_ 被捕获时
- 调试Visual Studio中可执行文件调用的C 文件
- 我如何调用在调试模式下具有主要的程序或代码
- MFC DDX_RADIO会导致调用dodataexchange(dlgdata.cpp行286)时导致调试断言失败
- 如何调试由另一个程序调用的程序
- 在调试中,如何知道对函数的重复调用中参数的统计数据(max-min,average,distribution..)
- GDB正在调试一个缺少特定调用堆栈的符号表的核心转储
- 每当在C++中调用 delete/delete[] 时都会中断调试器
- 调试:跟踪(和diffing)同一程序的两个版本的函数调用树
- 调试QT插槽未调用
- 调试 c++ 互斥锁时截断的调用堆栈
- 在VS2012下调试多个项目 - 主项目调用子项目
- 如何调试外部调用的C++可执行文件
- 有没有办法调试从C# DllImport调用的c ++ dll
- 可以valgrind报告丢失块的内存地址(用于调试递归函数调用)
- 为什么连VS调试器外启动的程序都不能调用terminate方法呢