如何在发布模式下为.net托管项目生成PDB?

Cri*_*scu 8 .net msbuild debug-symbols release-mode

我知道通过给编译器/ debug参数为.NET中的托管项目生成PDB .有没有办法在VS(2005)GUI中指定它?

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

<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
Run Code Online (Sandbox Code Playgroud)

在'发布'设置下:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Run Code Online (Sandbox Code Playgroud)

另一件事:我在MSDN上从这里了解到DebugType标签的可能值是:

  • full
  • pdbonly
  • none

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

Meh*_*ari 7

在VS2008中,您可以使用项目属性->Build ->Advanced ... ->Debug Info 设置属性.


Dan*_*ton 6

在DEBUG中:

<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
Run Code Online (Sandbox Code Playgroud)

在RELEASE中:

<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
Run Code Online (Sandbox Code Playgroud)


Cri*_*scu 5

我发现这个MONO请求可能会对' full'和' pdbonly' 之间的区别有所了解.

csc有一个"pdbonly"调试类型,它生成pdbs,同时生成运行时代码,即优化,没有调试器属性等.

这对于能够从发布质量代码获得有用的堆栈跟踪非常重要.

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

  • "获取有用的堆栈跟踪"这是不正确的.由于存在类型元数据,您将始终在.NET代码中获得有用的堆栈跟踪.发布版本中的PDB对于单步执行生产代码非常重要,但由于优化,您可能会在调试器中出现错误. (2认同)
  • 如果我收到了一个没有行号或带有堆栈跟踪的文件名的发布错误,我可能会尖叫"这没用!" (2认同)