Amy*_*Amy 9 .net c# exception stack-trace
是否有任何属性可以应用于样板方法,以便这些方法不会出现在堆栈跟踪中?我有很多它们,在某些情况下它们有几个层次.这只是混乱的事情.
示例代码:
class Program
{
public static void ThrowMe()
{
throw new NotImplementedException();
}
public static void HideMe()
{
ThrowMe();
}
static void Main(string[] args)
{
try
{
HideMe();
}
catch (Exception e)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将抛出此堆栈跟踪:
在Spork.Program.ThrowMe()在C:\ Projects\XXX\Testing Sandbox\ConsoleTesting\Program.cs:第58行
在Spork.Program.HideMe()在C:\ Projects\XXX\Testing Sandbox\ConsoleTesting\Program.cs:第64行
在Spork.Program.Main(String [] args)中的C:\ Projects\XXX\Testing Sandbox\ConsoleTesting\Program.cs:第70行
将Console.WriteLine(e)放在catch块中.切换到发布版本并按Ctrl + F5.你会看到这个:
System.NotImplementedException: The method or operation is not implemented.
at ConsoleApplication1.Program.ThrowMe() in C:\Users\hpassant\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs:line 9
at ConsoleApplication1.Program.Main(String[] args) in C:\Users\hpassant\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs:line 17
Run Code Online (Sandbox Code Playgroud)
请注意,HideMe()方法在堆栈跟踪中不可见.任务完成.
跟踪中未显示方法调用,因为JIT优化器内联了该方法:这是隐藏堆栈跟踪中方法的唯一方法.
它不是你能控制好的东西,方法必须是'小'而不是抛出任何异常本身.否则通常认为这是一个问题,而不是一个功能.很难弄清楚如何编码从A到B.