异常堆栈调试和发布模式之间的跟踪差异

Pin*_*ong 12 c#

下面的代码在调试和发布模式下生成不同的异常堆栈跟踪:

static class ET
{
    public static void E1()
    {
        throw new Exception("E1");
    }
    public static void E2()
    {
        try
        {
            E1();
        }
        catch (Exception e)
        {

            throw;

        }
    }

    public static void Entry()
    {
        try
        {

            E2();
        }
        catch (Exception e)
        {           
            Console.WriteLine(e.StackTrace);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

调试模式的结果:

在ET:E1()中的D:\ myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs:第47行

在ET:E2()中的D:\ myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs:第58行

at ET.Entry()在D:\ myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs:第68行

释放模式中的结果:

在ET:E2()中的D:\ myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs:第55行

at ET.Entry()在D:\ myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs:第68行

请注意,缺少发布模式中结果的第一行.如何在发布模式下返回违规行.

Chr*_*ain 16

您可能会看到内联的结果.在调试模式下编译时,内联始终处于关闭状态(因此调试很有意义).在发布模式下编译时,编译器将删除某些方法(受许多规则约束)并将其内容插入所有调用站点.这通过删除方法调用开销来改善这些方法的整体性能.