异常堆栈跟踪调试和释放模式之间的差异
本文关键字:之间 模式 释放 堆栈 跟踪 调试 异常 | 更新日期: 2023-09-27 18:10:01
下面的代码在调试和释放模式下生成不同的异常堆栈跟踪:
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);
}
}
}
调试模式的结果:
at ET.E1() in D:'myStudio'CSharp'CSharp4.0'MyCSharp'ExceptionHandling.cs:line 47
at ET.E2() in D:'myStudio'CSharp'CSharp4.0'MyCSharp'ExceptionHandling.cs:line 58
at ET.Entry() in D:'myStudio'CSharp'CSharp4.0'MyCSharp'ExceptionHandling.cs:line 68
Result in Release Mode:
at ET.E2() in D:'myStudio'CSharp'CSharp4.0'MyCSharp'ExceptionHandling.cs:line 55
at ET.Entry() in D:'myStudio'CSharp'CSharp4.0'MyCSharp'ExceptionHandling.cs:line 68
请注意,在发布模式下,结果的第一行丢失了。如何在释放模式下返回违规行。
您可能正在看到内联的结果。在调试模式下编译时,内联总是关闭的(这样调试才有意义)。在发布模式下编译时,编译器将删除某些方法(受许多规则的约束),并将其内容插入所有调用站点。这通过消除方法调用开销来提高这些方法的总体性能。