1

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

稍后,我的客户报告了崩溃,我不得不让 pdb 确定崩溃原因。我现在使用的 pdb 是否足以识别崩溃点。

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

我的理解是,即使他的符号在构建时的日期和时间方面不匹配,但在内容方面它会匹配。

我的理解正确吗?

4

3 回答 3

1

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

于 2010-08-17T15:07:26.627 回答
1

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

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

于 2010-08-17T15:47:31.323 回答
0

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

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

于 2010-08-17T18:32:45.280 回答