2016-04-13 29 views
0

我试图在Visual Studio中调试w3wp进程的'release'部署中的转储文件。如何在Visual Studio中调试“释放”转储?

当我尝试进入代码时,它说'PDB与图像不匹配',即使它在过去工作(我在我的机器上重建了确切的提交并指向那些生成的PDB)。

任何线索我如何调试此转储/确保我可以调试未来的转储?

感谢

+0

PDB是每个版本的,所以如果你想调试旧的版本,你需要使用PDB服务器或类似的东西来保持PDB。也就是说,托管代码具有足够的元数据,您可以在没有PDB的情况下调试很多场景,但您必须为SOS使用WinDbg。 –

回答

0

不能普遍使用不同的构建产生PDBS,即使源代码是相同的 - 调试放置一个GUID和年龄(计数器),其得到改变每一个版本。在调试器尝试使用pdb之前,这两个值必须匹配。

话虽如此,你可以试着用chkmatch来强制这样做。如果你幸运的话,你的新版本会有足够的布局来发布。为了确保构建环境尽可能相似 - 包括源代码位置(源文件绝对路径的长度可能影响二进制文件中的内部布局)。

如果您在原始版本中没有调试信息,那么将无法工作。

为了确保您将来没有这些问题,请始终使用调试信息构建发行版,然后保存这些发布版本的pdbs。

编辑:

对于C#项目,PDBS在项目属性进行控制 - >构建 - >高级构建设置 - >调试信息。在发布版本上将其设置为“仅限pdb”,在调试时将其设置为“全部”(应为默认值)。仅限Pdb不会影响发布版本的性能。

如果您控制部署环境,可以使用发行版二进制文件部署pdbs - 可以提高转储(不确定)。

如果您将二进制文件提供给最终用户,如果您想限制逆向工程,通常最好自己保留pdbs。

如果有任何情况下保留它们,只要你关心你的二进制文件的特定版本。

+0

感谢您的详细回复,我如何使用调试信息构建发布版本?另外,如果我将它们上传到我的生产服务器,它是否会导致任何性能开销? – Ron

+0

嘿,显然PDB正在被MSBuild包装发布的文件剥离。我们修改了构建并部署了一个新版本 - 希望下一次转储可以调试。谢谢! – Ron

相关问题