视觉工作室中所谓的"帧"是什么?

COM*_*Mer 2 c c++ debugging assembly visual-studio

在visual studio的Call Stack窗口中,它报告:

[Frames below may be incorrect and/or missing, no symbols loaded for IPCamera.ax]   
Run Code Online (Sandbox Code Playgroud)

Frames是什么意思,为什么缺少符号会导致它不正确?AFAIK,符号仅用于调试信息,缺少符号只会使源不可见.

替代文字

Kon*_*lph 5

帧==堆栈帧.

堆栈帧是存储调用堆栈上每个函数调用的信息的记录.它包含被调用函数的所有参数,局部变量和潜在返回值.

对于当前正在运行的每个函数调用(即尚未退出),调用堆栈上还有一个额外的帧.

缺少符号可能确实导致堆栈帧的错误显示,主要是由于两种现象:

  • 函数内联,和
  • 尾调优化.

在这两种情况下,实际代码中的函数调用都会转换为其他内容,因此堆栈帧会丢失(因为没有生成调用,因此没有堆栈帧).