2012-06-16 77 views
0

我有一個類Foo與方法SomeMethod()。在SomeMethod(),我運行:Bar bar = new Bar(); bar.BBQ();。在BBQ()之內,我調用私有方法Name(n),它引發了一個異常,並顯示消息new StackTrace().GetFrame(n).GetMethod().Name堆棧軌跡skipps的一種方法?

我的意圖是將1傳遞給Name(n),以便它返回值「BBQ」。但是,Name(0)返回「Name」,Name(1)返回「SomeMethod」。在拋出異常導致的堆棧跟蹤中,它也會像SomeMethod直接調用Name一樣讀取(不提及BBQ)。

有沒有辦法解決這個問題?有沒有人有任何想法可能導致這個錯誤?有沒有更好的方法來完成從名稱獲得價值「燒烤」?

[TestClass] 
public class Foo 
{ 
    public Foo() 
    { 
    } 
    [TestMethod] 
    public void SomeMethod() 
    { 
     Bar bar = new Bar(); 
     bar.BBQ(); 
    } 
} 

public class Bar 
{ 
    public Bar() 
    { 
    } 
    public void BBQ() 
    { 
     Name(1); 
    } 
    private void Name(int n) 
    { 
     throw new Exception(new StackTrace().GetFrame(n).GetMethod().Name); 
    } 
} 
+1

你可以發佈你的代碼嗎? –

+2

請發佈您的代碼。您的描述可能與您的代碼中實際發生的情況有所不同。 –

+0

爲什麼你會提供你的代碼的描述,而不是隻發佈它? –

回答

3

我強烈懷疑問題是該方法是由JIT編譯器內聯。您可以通過在調試器中運行調試版本來驗證這一點,並查看是否可以解決問題。我相信,在非調試環境下,獲得完全精確的堆棧跟蹤是不可行的。畢竟,你不想禁用內聯。

相關問題