4

我已经阅读了 StackOverflow 上已经存在的问题,但我仍然无法让它发挥作用。

我有

  • 来自客户的小型转储文件
  • 与客户获得的代码完全相同的版本
  • 在调试目录中,.pdb 文件为代码。

我尝试将迷你转储文件放在调试目录中,然后在 Visual Studio 2010 中打开它。我不知道这是否正确,或者下一步该做什么。

“开始调试”在正常的“调试”菜单中显示为灰色。

Minidump File Summary 选项卡的右上角有一个带有“Actions”的框。所以我点击了“仅使用本机调试”,但我得到的只是“当前位置没有可用的源代码”。

我一定错过了一些非常简单的东西 - 请有人给我一个提示吗?

4

2 回答 2

3

只是将各种信息汇总到一个答案中:

您是否有在构建程序时创建的 .pdb 文件?仅仅重建相同的源是行不通的,你需要为每个 build 保留 .pdb 文件。– 亚历克斯·法伯 2013年 2 月 20 日在 11:05

“在将 PDB 与二进制文件(DLL 或 exe)匹配时,调试器会匹配文件名、时间戳和校验和等信息。” (Saikat Sen,Codeproject 文章)

按照 AlexFarber 的提示,我将客户构建的源代码和发布文件夹复制到我的计算机上(整个构建已保存,包括发布文件夹中的 .pdb 和 .exe 文件)。

然后我将转储文件复制到发布文件夹中,并将 Microsoft 符号加载到同一文件夹中。

然后我再次将转储文件打开到 Visual Studio 2010 中。

我没有看到比以前更有帮助的东西,我认为这是由于这个原因 -请参阅这个 SO question 的接受答案。我正在使用 C# 和 .NET 2.0 程序集,看来我只能查看 .NET 4.0 程序集的源代码。

接下来,我将尝试 Hans Passant 在同一个问题上推荐的名为 sos.dll 的 WinDbg 插件。

如何绕过使用同一构建中的 pdb 文件的需要:

如果您使用 WinDbg,我认为您可以绕过对相同 .pdb 文件的此要求。来自virtualdub “如果调试器很顽固并且不想加载符号,因为它认为它们不匹配,您可以使用 .symopt+ 0x40 来设置“加载任何东西”标志。”

另外,如果我理解正确,您可以使用上面 sergmat 提到的 chkmatch 工具来匹配 .exe 和 .pdb 文件。

于 2014-04-02T14:20:48.273 回答
2

据我了解,您有一个客户的小型转储,我认为他正在使用您的应用程序的发布版本和调试 PDB 文件。

那是你的问题,你的 PDB 和迷你转储不匹配。为了查看清晰的堆栈跟踪,PDB 应具有与生成转储文件的应用程序之一相同的构建配置/平台。

于 2013-02-20T14:14:38.200 回答