【问题标题】:Do you have to deploy the .pdb file with compiling under release?您是否必须在发布时使用编译来部署 .pdb 文件?
【发布时间】:2010-10-11 02:46:58
【问题描述】:

是否必须在发布下编译时部署 .pdb 文件?

为什么在您进行发布构建时它甚至会编译 .pdb?

【问题讨论】:

    标签: .net deployment release-management


    【解决方案1】:

    如果需要,您还可以在编译选项中关闭 PDB 文件生成。

    【讨论】:

      【解决方案2】:

      不,您不必部署 .pdb 文件。

      引用MSDN 的话,“使用 /debug (Visual Basic/C#) 构建时会创建一个 PDB 文件。”因此在编译发布时不应创建调试数据库。

      【讨论】:

        【解决方案3】:

        不,您不发送 .pdb 文件。生成它们是因为有时能够调试发布版本会很有帮助。

        【讨论】:

          【解决方案4】:

          不,您不需要部署它们。

          至于为什么它们甚至内置于发行版中。 PDB 文件确实有多种用途,但主要用途(至少对我而言)是

          1. 调试
          2. 分析

          这两项任务都在发布二进制文件上有效完成,这就是发布版本包含 PDB 的原因。事实上,当调试 Watson 转储时,它 100% 的时间都是针对发布版本的。如果没有 PDB,我将不得不求助于拆散:(

          【讨论】:

          • @Dan,分析的一部分是能够将程序集中的随机位置映射回用户代码。否则,您将不知道执行了哪些代码以及执行了哪些程序集。 PDB 非常适合映射程序集 -> 源(这是调试器需要它们的原因之一)
          • 好的——我想我会考虑调试的那一部分。 ;-) 我以为你的意思是对发布代码进行某种性能分析。
          • @Dan,分析是性能分析。除非它可以将程序集映射回您实际编译的代码,否则它是无用的。这就是 PDB 的用武之地。
          【解决方案5】:

          不。您不需要分发它们。它将有助于调试(或者我应该说它会让理智的人可能进行调试)。

          您还可以关闭或调整 Visual Studio 中生成的符号的“级别”——只需转到项目属性/“构建”选项卡/“高级”——并调整“调试信息”字段。

          【讨论】:

            【解决方案6】:

            AVICode 的 InterceptStudio 等一些工具使用 pdb 文件从工具内查看特定异常/堆栈跟踪/本地的源,而不必打开源并转到特定行。

            【讨论】:

              【解决方案7】:

              PDB 文件包含有关函数名称的信息。您需要它才能获得堆栈跟踪。它还可以包含有关将其映射到源的信息。有时您可能想要发布您的发布版本,但仍需要分析客户端发生的崩溃。为此,需要 PDB。理论上,为发布而编译时的 PDB 应该比为调试而编译时具有更少的信息。

              【讨论】:

                【解决方案8】:

                PDB 文件包含允许您调试二进制文件的调试符号即使在发布模式下。您不必(并且可能不应该部署它们),因为它们可能用于对您的应用程序进行逆向工程。不过,请务必将它们存档在某个地方,因为当您想要调试故障转储时,它们会非常方便。

                【讨论】:

                  【解决方案9】:

                  你不需要它们来运行。

                  即使构建是在发布配置上,pdb 文件也可用于调试。

                  【讨论】:

                    【解决方案10】:

                    您不必随二进制文件一起部署和分发 PDB 文件。

                    但是,我建议您保留它们(并最终将它们编入索引),以便能够分析客户、QA 和支持人员发送给您的任何转储文件。这样,您将能够获得可理解的堆栈跟踪和符号信息。

                    【讨论】:

                      【解决方案11】:

                      正如该线程中的大多数人所说:不,您不必发送 PDB 文件;但如果你打算将代码发布到野外,你真的应该这样做。

                      真正重要的是能够支持您的应用程序。如果没有 PDB,当您的应用程序崩溃时,您的用户只能告诉您应用程序崩溃的原始内存地址;但是使用 PDB 文件,您会收到一个错误,您实际上可以做一些事情。

                      【讨论】:

                      • 实际上,他们可以轻松地向您发送内存转储(甚至不必是完整的,任何 Windows PC 都可以生成一个),这至少会告诉您整个调用堆栈,通常是变量传递到最顶层的函数调用
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-10-09
                      • 1970-01-01
                      • 2016-05-11
                      • 1970-01-01
                      相关资源
                      最近更新 更多