[英]Stack Trace for logging in .NET
我編寫了一個logger / exceptionfactory模塊,它使用System.Diagnostics.StackTrace來獲取調用方法及其聲明類型的屬性。 但是我注意到,如果我在發布模式下運行Visual Studio之外的代碼,我的一些較短的方法會從堆棧跟蹤中內聯並丟失。 現在我無法測試一個方法是否會在運行時內聯,但我不想[MethodImpl(MethodImplOptions.NoInlining)]
每個重要的方法。 但是如果我的基類中的方法因此而丟失,我可能會誤讀層和操作信息,這可能導致錯誤的日志或錯誤參數化的異常。
是否有一條經驗法則是何時何地內聯? 虛方法,靜態方法,基類方法是否有任何不同? 我只需要擔心內部裝配內聯嗎? 內部名稱空間
是的,有一些規則,但它們是JIT編譯器使用的啟發式方法,這些啟發式方法可能會在瞬間發生變化。
我所知道的一些“沉重”的啟發式:
啟發式算法都是抖動的實現細節,這意味着它們沒有正式記錄,並且可能隨時會發生變化。
話雖如此,這里有一些你可能會感興趣的文章(雖然其中一些現在有點長):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.