[英]How can I tell the compiler to ignore a method in stack traces?
是否有任何屬性可以應用於樣板方法,以便這些方法不會出現在堆棧跟蹤中? 我有很多它們,在某些情況下它們有幾個層次。 這只是混亂的事情。
示例代碼:
class Program
{
public static void ThrowMe()
{
throw new NotImplementedException();
}
public static void HideMe()
{
ThrowMe();
}
static void Main(string[] args)
{
try
{
HideMe();
}
catch (Exception e)
{
}
}
}
這將拋出此堆棧跟蹤:
在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
請注意,HideMe()方法在堆棧跟蹤中不可見。 任務完成。
跟蹤中未顯示方法調用,因為JIT優化器內聯了該方法 :這是隱藏堆棧跟蹤中方法的唯一方法。
它不是你能控制好的東西,方法必須是'小'而不是拋出任何異常本身。 否則通常認為這是一個問題,而不是一個功能。 很難弄清楚如何編碼從A到B.
如果您的方法不夠簡單,無法自動內聯,您可以為編譯器提供一個強大的提示,您希望它與[MethodImpl(MethodImplOptions.AggressiveInlining)]
屬性一起使用。
您仍然需要在發布模式下編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.