【问题标题】:How to generate PDB's for .net managed projects in release mode?如何在发布模式下为 .net 托管项目生成 PDB?
【发布时间】:2010-10-09 18:45:33
【问题描述】:

我知道 PDB 是为 .NET 中的托管项目生成的,方法是为编译器提供 /debug 参数。 有没有办法在 VS (2005) GUI 中指定这个?

到目前为止,我可以让它在发布模式下生成 PDB 的唯一方法是手动修改 .csproj 文件并添加:

<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>

在“发布”设置下:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

另一件事:我从 MSDN here 了解到DebugType 标记的可能值是:

  • full
  • pdbonly
  • none

这些值如何影响编译器的行为?

【问题讨论】:

    标签: .net msbuild debug-symbols release-mode


    【解决方案1】:

    在VS2008中,你可以使用项目属性-&gt;Build-&gt;Advanced...-&gt;Debug Info来设置属性。

    【讨论】:

    • 不错!我验证它也适用于 VS 2005。我盯着“构建”设置一百万次,但从未注意到“高级”按钮。谢谢!
    • 在 VS 2008(可能还有 2005 年)中,pdb-only 是发布版本的默认设置(完全用于调试)。
    【解决方案2】:

    在调试中:

    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    

    发布中:

    <DebugSymbols>true</DebugSymbols>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    

    【讨论】:

      【解决方案3】:

      我找到了this MONO request,这可能有助于了解“full”和“pdbonly”之间的区别。

      csc 有一个“pdbonly”调试类型 生成 pdb,同时生成 运行时代码,即优化,否 调试器属性等

      这对于能够 从获取有用的堆栈跟踪 发布质量代码。

      在我看来,2 个标签(DebugSymbols 和 DebugType)的存在是多余的。

      【讨论】:

      • "获取有用的堆栈跟踪" 这是不正确的。由于存在类型元数据,您将始终在 .NET 代码中获得有用的堆栈跟踪。发布风格的 PDB 对于单步执行生产代码很重要,但由于优化,您可能会在调试器中遇到错误。
      • @Daniel Bullington,如果没有 pdb 文件,您将无法获得行号和文件名,这使得堆栈跟踪至少“不太有用”
      • @tster 是的,我同意,但即使没有 PDB(因此没有行号/文件名),堆栈跟踪在较小程度上仍然有用:)
      • 如果我收到一个没有行号或文件名和堆栈跟踪的发布错误,我可能会尖叫“这没用!”
      • 我经常需要寻找错误,我必须参考的只是带有文件名和方法名的堆栈跟踪,但没有行号。这些方法通常有数百行长,所以我必须通过移动一条写有Console.WriteLine("got here"); 的行来一分为二。这是一场噩梦。
      猜你喜欢
      • 2012-05-15
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多