要回答您的第一个问题,如果您需要异常报告的行号,您只需要包括生产版本的PDB。 为了回答第二个问题,在PDB中使用“Optimise”标志意味着任何stack "collapse" will be reflected in the stack trace。我不确定报告的实际行号是否可能是错误的-这需要更多的调查。 要回答你的第三个问题,你可以用一个相当巧妙的技巧来两全其美。默认调试版本和默认发布版本之间的主要区别在于,在执行默认发布版本时,将打开优化,并且不会发出调试符号。所以,分四步: 1.更改您的发布配置以发出调试符号。这对应用的性能几乎没有影响,并且在以下情况下非常有用(何时?)您需要调试应用的发布版本。 1.使用新的版本构建配置进行编译。即 with 调试符号和 with 优化。请注意,99%的代码优化是由JIT编译器完成的,而不是语言编译器。 1.在应用的文件夹中创建一个名为xxxx的文本文件。exe.ini(或dll或其他),其中xxxx是可执行文件的名称。此文本文件最初应如下所示:
3条答案
按热度按时间31moq8wy1#
当您想在堆栈跟踪中查看源文件名和行号时,请使用pdb-only选项生成PDB。优化与PDB生成分离,即。也就是说,您可以优化 * 和 * 生成PDB,而不会影响性能。
从the C# Language Reference
如果您使用/debug:full,请注意/debug:full对JIT优化代码的速度和大小有一些影响,对代码质量也有一些影响。我们建议使用/debug:pdbonly或no PDB来生成发布代码。
5f0d552i2#
要回答您的第一个问题,如果您需要异常报告的行号,您只需要包括生产版本的PDB。
为了回答第二个问题,在PDB中使用“Optimise”标志意味着任何stack "collapse" will be reflected in the stack trace。我不确定报告的实际行号是否可能是错误的-这需要更多的调查。
要回答你的第三个问题,你可以用一个相当巧妙的技巧来两全其美。默认调试版本和默认发布版本之间的主要区别在于,在执行默认发布版本时,将打开优化,并且不会发出调试符号。所以,分四步:
1.更改您的发布配置以发出调试符号。这对应用的性能几乎没有影响,并且在以下情况下非常有用(何时?)您需要调试应用的发布版本。
1.使用新的版本构建配置进行编译。即 with 调试符号和 with 优化。请注意,99%的代码优化是由JIT编译器完成的,而不是语言编译器。
1.在应用的文件夹中创建一个名为xxxx的文本文件。exe.ini(或dll或其他),其中xxxx是可执行文件的名称。此文本文件最初应如下所示:
1.通过这些设置,您的应用将全速运行。当您希望通过打开调试跟踪并可能关闭(CIL)代码优化来调试应用时,只需使用以下设置:
编辑根据cateye的评论,this can also work in a hosted environment如ASP.NET.
6tr1vspr3#
没有必要将它们包含在您的发行版中,但您绝对应该构建并保留它们。否则调试崩溃转储几乎是不可能的。
我也会打开优化。虽然它确实使调试更加困难,但根据应用程序的性质,性能增益通常是非常重要的。我们很容易看到一些算法的发布版本与调试版本相比性能超过10倍。