调用堆栈字节偏移量

use*_*967 1 c++ visual-studio-2010

Call StackVisual Studio 2010 的窗口中,字节偏移量指的是行号旁边的内容?

Test.exe!__tmainCRTStartup()  Line 547 + 0x2c bytes
Run Code Online (Sandbox Code Playgroud)

为什么有些堆栈帧有字节偏移而其他堆栈帧没有?

Han*_*ant 6

调试器通常只有公共符号的地址,如__tmainCRTStartup().但是代码可能在函数内部的任何偏移处执行.没有任何符号.所以你看到了符号地址的偏移量.

值得注意的是,在调试发布版本代码的情况下,由于代码在函数内部执行,其符号未进入.pdb文件,因此可能会看到较大的偏移量.然后,行号也将丢失,这对于发布构建代码非常典型,因为在代码优化器移动代码之后行号变得毫无意义.通过链接器的/ PDBSTRIPPED选项从.pdb文件中删除行号.

像+ 0x2c这样的偏移是一个非常可靠的指示,它实际上是在命名函数内部.偏移越大,几率逐渐下降.你看到的符号,例如+ 0x2000偏移几乎肯定是不可靠的.使用Windows系统DLL的符号文件进行调试时并不罕见.

简而言之:您可以看到执行指令从函数开始的偏移量.