发布模式下的调试符号

6
在一个ASP.NET 2.0网站中,我记录未处理异常的详细信息。我希望记录源文件名和行号,但当异常发生时,堆栈跟踪中没有这些信息。原因是在web.config编译设置中debug="false"(它是一个生产网站),因此服务器上没有生成PDB文件。有没有一种方法可以让ASP.NET在发布模式下生成调试符号文件?我不想预编译网站。

我并不100%确定,但我怀疑这是不可能的。 - o.k.w
2个回答

6

好的,我找到了答案。您可以将debug设置为“false”以获得优化,然后在system.codedom编译器设置中设置compilerOptions =“/debug:pdbonly”以获得符号。以下是相关的web.config摘录:

<system.web>
  ....
  <compilation debug="false" defaultLanguage="c#">
  ...
  </compilation>
</system.web>
<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
        type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        compilerOptions="/debug:pdbonly">
      <providerOption name="CompilerVersion" value="v3.5"/>
      <providerOption name="WarnAsError" value="false"/>
    </compiler>
    ...
  </compilers>
</system.codedom>

仅供参考,对于我的ASP.NET 4.0网站项目,在浏览CompilerInfo数组后(使用CompilerInfo[] allCompilerInfo = CodeDomProvider.GetAllCompilerInfo();获取它),版本设置为“Version=4.0.0.0”和<providerOption name="CompilerVersion" value="v4.0"/>。其他所有内容都相同。故事的寓意是你的结果可能会有所不同,请检查您项目的实际设置。 - Eric Sassaman

1

除非我漏掉了什么,否则调试版本和发布版本的区别在于优化。您应该能够创建一个带有pdb的普通调试二进制文件,并确保在项目设置中启用所有优化设置。据我所知,除非有异常,否则不会加载pdb文件等...


这是一个ASP.NET 2.0网站 - 我没有构建二进制文件。所有编译都由ASP.NET动态完成,并由web.config设置控制。似乎我可以选择debug="false"(优化但没有符号)或debug="true"(符号但没有优化)。 - noj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接