以下代码在调试模式和发布模式下会生成不同的异常堆栈跟踪:
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 行
请注意,在发布模式下结果中缺少了第一行。如何返回发布模式下的冒犯行。
E1
已被内联到E2
中 - 这是一个有用的优化,但这意味着一些方法将在堆栈跟踪中缺失。 - Damien_The_Unbeliever