符号文件和调试

时间:2010-08-17 15:03:46

标签: c++ debugging visual-c++ symbols crash-dumps

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

稍后我的客户报告了一次崩溃,我不得不让pdb确定崩溃原因。我现在采取的pdb是否足以确定崩溃点。

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

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

我的理解是否正确?

3 个答案:

答案 0 :(得分:1)

是的,这仍然应该没有问题(但是,如果内存服务,你可以期待关于不匹配的时间戳的警告)。

答案 1 :(得分:1)

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

然而即使它不完全匹配,它可能会让你足够接近,通过检查看到错误。

答案 2 :(得分:0)

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

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