在Call Stack
Visual Studio 2010 的窗口中,行号旁边的字节偏移指的是什么?
Test.exe!__tmainCRTStartup() Line 547 + 0x2c bytes
为什么有些堆栈帧有字节偏移,而有些则没有?
在Call Stack
Visual Studio 2010 的窗口中,行号旁边的字节偏移指的是什么?
Test.exe!__tmainCRTStartup() Line 547 + 0x2c bytes
为什么有些堆栈帧有字节偏移,而有些则没有?
调试器通常只有公共符号的地址,如 __tmainCRTStartup()。但是代码可能在该函数内部执行,位于函数开头的任何偏移处。没有任何符号。所以你看到的是符号地址的偏移量。
值得注意的是,在调试发布构建代码的情况下,由于在函数内部执行的代码没有进入 .pdb 文件,您可能会看到较大的偏移量。然后行号也会丢失,这对于发布构建代码来说非常典型,因为在代码优化器移动代码后行号变得毫无意义。链接器的 / PDBSTRIPPED选项从 .pdb 文件中删除了行号。
像 +0x2c 这样的偏移量是一个非常可靠的指示,它实际上在命名函数内部。偏移量越大,赔率越低。你看到的符号,比如说,+0x2000 偏移量几乎肯定是不可靠的。当您使用 Windows 系统 DLL 的符号文件进行调试时,这种情况并不少见。
长话短说:您会看到执行指令与函数开头的偏移量。