如何读取故障转储文件(我有源代码和 .pdb 文件)
Posted
技术标签:
【中文标题】如何读取故障转储文件(我有源代码和 .pdb 文件)【英文标题】:How to read a crash dump file (I have source code and .pdb files) 【发布时间】:2013-02-05 08:07:47 【问题描述】:我已经阅读了 *** 上的问题,但我仍然无法使其发挥作用。
我有
来自客户的小型转储文件 与客户获得的代码版本完全相同 在调试目录中,.pdb 文件用于代码。我尝试将迷你转储文件放在调试目录中,然后在 Visual Studio 2010 中打开它。 我不知道这是否是正确的做法,或者下一步该做什么。
“开始调试”在正常的“调试”菜单中显示为灰色。
小型转储文件摘要选项卡的右上角有一个带有“操作”的框。所以我点击了“仅使用本机调试”,但我得到的只是“当前位置没有可用的源代码。”
我一定遗漏了一些非常简单的东西 - 请有人给我一个提示吗?
【问题讨论】:
您有在构建程序时创建的 .pdb 文件吗?仅仅重建相同的源是行不通的,你需要为每个构建保留 .pdb 文件。 另外,您需要在 Debugger 选项中启用 Microsoft Symbol Server。 @AlexFarber 感谢您的回复。您的意思是从 Microsoft 符号服务器加载 Microsoft 库的符号吗?我已经做到了。 我只是在检查 .pdb 文件(我不知道!)。 在 Visual Studio 中分析崩溃转储***.com/q/12252407/1888362 【参考方案1】:只是将各种信息汇总成一个答案:
您是否有在构建程序时创建的 .pdb 文件?仅仅重建相同的源是行不通的,您需要为每个构建保留 .pdb 文件。 – Alex Farber 2013 年 2 月 20 日 11:05
“在将 PDB 与二进制文件(DLL 或 exe)匹配时,调试器会匹配文件名、时间戳和校验和等信息。” (Saikat Sen, Codeproject article)
按照 AlexFarber 的提示,我将客户构建的源代码和发布文件夹复制到我的计算机上(整个构建已保存,包括发布文件夹中的 .pdb 和 .exe 文件)。
然后我将转储文件复制到发布文件夹中,并将 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 来设置“加载任何东西”标志。”
另外,如果我理解正确,您可以使用上面 sergmat 提到的 chkmatch 工具来匹配 .exe 和 .pdb 文件。
【讨论】:
【参考方案2】:据我了解,您有一个客户的小型转储,我认为他正在使用您的应用程序的发布版本和调试 PDB 文件。
那是你的问题,你的 PDB 和迷你转储不匹配。为了查看清晰的堆栈跟踪,PDB 应具有与生成转储文件的应用程序之一相同的构建配置/平台。
【讨论】:
Relasee 和 Debug 从来没有为我工作过......我说的是多年的经验以上是关于如何读取故障转储文件(我有源代码和 .pdb 文件)的主要内容,如果未能解决你的问题,请参考以下文章