当在Visual Studio调试,如果调用堆栈符号丢失,例如:为什么调试器需要符号来重建堆栈?
00 > HelloWorld.exe!my_function(int y=42) Line 291
01 dynlib2.dll!10011435()
[Frames below may be incorrect and/or missing, no symbols loaded for dynlib2.dll]
02 dynlib2.dll!10011497()
03 HelloWorld.exe!wmain(int __formal=1, int __formal=1) Line 297 + 0xd bytes
04 HelloWorld.exe!__tmainCRTStartup() Line 594 + 0x19 bytes
05 HelloWorld.exe!wmainCRTStartup() Line 414
06 [email protected]() + 0x23 bytes
调试器将显示警告Frames below may be incorrect and/or missing
。
(请注意,只有线01和02无符号00号线,在这里我设置一个断点和所有其他线路已加载的符号。)
现在,我知道如何解决警告( - >获得pdb文件),我不明白的是为什么它显示出来!上面粘贴的堆栈完全正常,只是我没有用于dynlib2.dll模块的pdb文件。
为什么调试器需要一个符号文件来确保堆栈是正确的?
这个问题的答案到底是什么? (除了大致匹配相同的标签吗?) – 2010-09-15 14:10:24
我的观点是,在没有符号文件的情况下,重构的callstack中不会看到完整的符号调试信息,因为符号调试信息不包含在二进制文件中。我的猜测是@valdo暗示符号文件中有信息能够完整地生成一个完整的调用堆栈 - 我认为情况并非如此,但很高兴知道我错了。 – 2010-09-15 14:27:04