C++ 符号文件与调试

C++ 符号文件与调试,c++,debugging,visual-c++,symbols,crash-dumps,C++,Debugging,Visual C++,Symbols,Crash Dumps,假设我有一个用VC++6.0编写的自定义服务,并且我已经将其作为特定版本的一部分发布。不幸的是,我在构建二进制文件时没有使用pdb 后来,我的客户报告了一起车祸,我不得不让pdb确认车祸原因。我现在使用的pdb是否足以确定崩溃点 换句话说,我分别使用了二进制和pdb,但是在使用二进制之后,我没有对源代码进行任何更改 我的理解是,即使他认为这些符号在建造日期和时间上并不匹配,但在内容上会匹配 我的理解正确吗?是的,这应该仍然可以正常工作(不过,如果内存可用,您可能会收到时间戳不匹配的警告)。您需要

假设我有一个用VC++6.0编写的自定义服务,并且我已经将其作为特定版本的一部分发布。不幸的是,我在构建二进制文件时没有使用pdb

后来,我的客户报告了一起车祸,我不得不让pdb确认车祸原因。我现在使用的pdb是否足以确定崩溃点

换句话说,我分别使用了二进制和pdb,但是在使用二进制之后,我没有对源代码进行任何更改

我的理解是,即使他认为这些符号在建造日期和时间上并不匹配,但在内容上会匹配


我的理解正确吗?

是的,这应该仍然可以正常工作(不过,如果内存可用,您可能会收到时间戳不匹配的警告)。

您需要确保使用完全相同的编译器版本(补丁可以更改代码生成和地址)、一组编译器/链接器选项、,相同的库版本以及相同的源,以确保地址匹配。如果你能做到这一点,那么你应该能够采取一个pdb生成后


但是,即使它不完全匹配,也有可能让您通过检查足够近地看到错误。

如果.pdb和二进制文件是从相同的源代码构建的,即使不是同时构建的,它们也应该能够完美地协同工作。但是,您将无法在任何调试器中加载此文件。例如,VisualStudio调试器将拒绝加载它,因为它会说它们不匹配


您需要一个调试器,它可以接受不匹配的符号,例如WinDbg。要加载不匹配的符号,请键入magic命令symopt+0x40。

是,我在windbg中看到了警告。但底线是它会起作用。@ckv:我想可能会有一些不起作用的黑暗角落,但它似乎能处理我所需要的一切。这就是为什么我想到在这里向如此多的用户征求专家意见。@ckv:一个合理的想法,但这种事情很难让任何人绝对肯定。我当然从来没有尝试过用这种方式生成的PDB文件在Windbg上进行完整的回归测试——我会有点惊讶其他人也这么做了。嗯,好吧,我明白你的意思。谢谢。如果代码以有趣的方式使用
\uuuu DATE\uuu
宏,这仍然不起作用。