1

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

Test.exe!__tmainCRTStartup()  Line 547 + 0x2c bytes

为什么有些堆栈帧有字节偏移,而有些则没有?

4

1 回答 1

6

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

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

像 +0x2c 这样的偏移量是一个非常可靠的指示,它实际上在命名函数内部。偏移量越大,赔率越低。你看到的符号,比如说,+0x2000 偏移量几乎肯定是不可靠的。当您使用 Windows 系统 DLL 的符号文件进行调试时,这种情况并不少见。

长话短说:您会看到执行指令与函数开头的偏移量。

于 2012-12-15T16:28:52.293 回答