代码之家  ›  专栏  ›  技术社区  ›  hamishmcn

如何使用PDB文件

  •  49
  • hamishmcn  · 技术社区  · 17 年前

    我听说使用PDB文件可以帮助诊断崩溃发生的位置。
    我的 基本的 理解是,您向Visual studio提供源文件、pdb文件和崩溃信息(来自Watson博士?)
    有人能解释一下这一切是如何运作的/涉及什么吗? 非常感谢。

    3 回复  |  直到 15 年前
        1
  •  33
  •   Gustavo Mori    14 年前

    PDB文件将程序集的MSIL映射到原始源代码行。这意味着,如果将与程序集一起编译的PDB放在与程序集相同的目录中,则异常堆栈跟踪将具有原始源文件中位置的名称和行。如果没有PDB文件,您将只能看到堆栈跟踪的每个级别的类名和方法名。

        2
  •  37
  •   Omer van Kloeten    17 年前

    PDB文件是在构建项目时生成的。它们包含与Visual Studio可以解释的构建二进制文件相关的信息。

    当程序崩溃并生成崩溃报告时,Visual Studio能够获取该报告,并通过应用程序的PDB文件将其链接回源代码。PDB文件必须由生成崩溃报告的同一二进制文件构建!

    随着时间的推移,我们遇到了一些问题。

    • 调试崩溃报告的机器需要与构建二进制文件的机器具有相同路径上的源代码。
    • 发布版本通常会优化到无法查看对象成员变量状态的程度

    如果有人知道如何击败前者,我将不胜感激。

        3
  •  12
  •   infojolt    11 年前

    您应该考虑设置一个符号服务器,并将PDB文件编入源代码控制系统的索引。我最近刚刚为我们的产品完成了这个过程,效果很好。您不必担心使PDB文件与二进制文件一起可用,也不必担心在调试转储文件时如何获取适当的源代码。

    约翰·罗宾斯的书: http://www.amazon.com/Debugging-Microsoft-NET-2-0-Applications/dp/0735622027/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1222366012&sr=8-1

    这里有一些生成迷你转储的示例代码(不必局限于崩溃后分析——你可以在代码的任何时候生成它们而不会崩溃): http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx