是否有任何属性可以应用于样板方法,以便此类方法不会出现在堆栈跟踪中?我有很多,在某些情况下,它们有好几层。这只是乱七八糟的东西。
示例代码:
class Program
{
public static void ThrowMe()
{
throw new NotImplementedException();
}
public static void HideMe()
{
ThrowMe();
}
static void Main(string[] args)
{
try
{
HideMe();
}
catch (Exception e)
{
}
}
}
这会抛出堆栈跟踪:
at Spork.Program.ThrowMe() in C:\Projects\XXX\Testing Sandbox\ConsoleTesting\Program.cs:line 58
at Spork.Program.HideMe() in C:\Projects\XXX\Testing Sandbox\ConsoleTesting\Program.cs:line 64
at Spork.Program.Main(String[] args) in C:\Projects\XXX\Testing Sandbox\ConsoleTesting\Program.cs:line 70
最佳答案
将 Console.WriteLine(e) 放在 catch block 中。切换到发布版本并按 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
请注意,HideMe() 方法在堆栈跟踪中不可见。任务完成。
方法调用未显示在跟踪中,因为JIT 优化器内联了该方法:这是在堆栈跟踪中隐藏方法的唯一方法。
这不是您可以很好地控制的东西,该方法必须“小”并且本身不会抛出任何异常。这通常被认为是一个问题,而不是一个功能。很难弄清楚代码是如何从 A 到 B 的。
关于c# - 我如何告诉编译器忽略堆栈跟踪中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4818745/