下面的代码在调试和发布模式下生成不同的异常堆栈跟踪:
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);
}
}
}
调试模式下的结果:
在 D:\myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs 中的 ET.E1() 处:第 47 行
在 D:\myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs 中的 ET.E2() 处:第 58 行
在 D:\myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs 中的 ET.Entry() 处:第 68 行
发布模式的结果:
在 D:\myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs 中的 ET.E2() 处:第 55 行
在 D:\myStudio\CSharp\CSharp4.0\MyCSharp\ExceptionHandling.cs 中的 ET.Entry() 处:第 68 行
请注意,发布模式下结果的第一行丢失。如何在发布模式下返回有问题的线路。
您可能看到的结果是inlining http://bartdesmet.net/blogs/bart/archive/2007/02/19/inlining-yes-it-happens.aspx。当您在调试模式下编译时,内联始终处于关闭状态(以便调试有意义)。当您在发布模式下编译时,编译器将删除某些方法(取决于很多规则 http://msdn.microsoft.com/en-us/library/ms973858.aspx#highperfmanagedapps_topic10)并将其内容插入所有调用站点。这通过消除方法调用开销来提高这些方法的整体性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)