如何读取崩溃转储文件(我有源代码和.pdb文件)

时间:2013-02-20 10:44:45

标签: c# windows visual-studio-2010 crash minidump

我已经阅读了StackOverflow上已有的问题,但我仍然无法使其正常工作。

我有

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

我尝试将迷你转储文件放在调试目录中,然后在Visual Studio 2010中打开它。 我不知道这是正确的做法,也不知道接下来要做什么。

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

Minidump文件摘要选项卡的右上角有一个带有“操作”的框。所以我点击了“仅使用Native进行调试”,但我得到的是“当前位置没有可用的源代码。”

我必须遗漏一些非常简单的东西 - 请有人给我一个提示吗?

2 个答案:

答案 0 :(得分:3)

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

您是否拥有在构建程序时创建的.pdb文件?只重建相同的源代码并不起作用,您需要为每个构建保留.pdb文件。 - Alex Farber 2月20日' 13 11:05

"当PDB与二进制文件(DLL或exe)匹配时,调试器匹配文件名,时间戳和校验和等信息。" (Saikat Sen, Codeproject article)

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

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

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

我没有看到比以前更有帮助的东西,我认为这是由于 - see the accepted answer on this SO question。我正在使用C#和.NET 2.0程序集,似乎我只能查看.NET 4.0程序集的源代码。

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

如何满足使用同一版本的pdb文件的需求:

如果您使用WinDbg,我认为您可以针对相同的.pdb文件解决此要求。从virtualdub"如果调试器很顽固并且不想加载符号,因为它认为它们不匹配,则可以使用.symopt + 0x40来设置"加载什么" 。标志#&34;

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

答案 1 :(得分:2)

据我所知,你有一个客户的minidump,我认为他正在使用你的应用程序的Release版本和Debug PDB文件。

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