【问题标题】:Do I need to save more than PDBs to debug a crash dump file?我是否需要保存多个 PDB 才能调试故障转储文件?
【发布时间】:2020-11-21 12:57:06
【问题描述】:

为了正确调试客户发送给我的故障转储文件,我需要保存多少原始版本?显然我需要 PDB 我还需要其他东西吗?

(这将用于由 dbghelp.dll 中的MiniDumpWriteDump 函数编写的故障转储文件。)

到目前为止,我一直保存整个构建文件夹。代码、PDB、.OBJ 文件、输出二进制文件,应有尽有。只是为了安全。我想尽量减少我保存的内容。但我无法发现我错过了什么。

实际的源代码将在源代码控制中并带有构建标签,因此我可以按标签提取并准确获取我用来构建的内容。在调试故障转储之前,我什至需要费心拉取源代码,还是仅拥有 PDB 就足够了?

【问题讨论】:

  • PDB 是调试 minidump 时获取符号信息所需的一切。 PDB 包含将地址映射到符号和源文件和行的所有信息。不需要其他工件。如果您还 index sources & publish symbols,那么调试中唯一的手动步骤是在调试器中打开 .dmp 文件。其他一切都为您完成,例如加载正确的 PDB 或下载正确版本的源文件。不过,这并不是严格要求的。

标签: windows crash-dumps minidump dbghelp


【解决方案1】:

对于您的公司,PDB 应该是您所需要的。源代码也很有帮助,因为 PDB 提供了行号,您可以直接查看源代码。

通常您不会复制 PDB,而是设置符号服务器。您也不会复制源代码,而是让源服务器管理它。 Team Foundation Server (TFS) 两者都提供。但是有alternatives that do not need TFS

如果是 .NET 程序,您还需要发生崩溃的客户端机器上的 SOS.dll 和 MSCORDACWKS.DLL。具有正确的版本号(请注意,可能安装了多个 .NET 框架)。

SOS 是 WinDbg 的调试扩展,可启用 .NET 调试。 MSCORDACWKS 是数据访问组件 (DAC),它知道内存中对象的外观。 (MS = Microsoft,COR = .NET,WKS = 工作站)。有一个专用的 WinDbg 命令,.cordll

【讨论】:

  • 为什么我需要来自发生崩溃的机器的 sos.dll 和 mscordacwks.dll?那对我有什么好处?这对我来说是新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2015-11-22
  • 2017-02-13
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多