2014-03-19 101 views
1

是否有可能在windows store應用中獲取當前調用堆棧,而不會引發異常?獲取當前調用堆棧

我發現this answer,但它不適用於Windows應用商店。

爲什麼我需要這個

我需要調用堆棧,因爲我有一個DirectX紋理內存泄漏。

我想在分配它們時將調用堆棧附加到我的紋理上。在使用某些程序後,我會打印尚未釋放的所有紋理的調用堆棧。

應該很容易看出我忘記釋放紋理的位置。

+1

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

回答

6

有沒有文件的方式獲得訪問當前堆棧像存在於.NET中(如與StackFrame)。

您可以嘗試通過創建一個記錄操作的函數來自行維護日誌或記錄。這將需要粘貼的一點點進入功能:

[Conditional("DEBUG")] 
void Log(string message, 
     [CallerMemberName] string member = "", 
     [CallerFilePath] string path = "", 
     [CallerLineNumber] int line = 0) { 
    Debug.WriteLine(string.Format("{0}\t{1}:{3} ({2}) ", 
     message, member, path, line)); 
} 

使用...

Log("hello!"); 

將產生:

hello! MainPage_Loaded:45 (c:\Dev\Projects\Win8AppTest\MainPage.xaml.cs) 

上述功能使用幾個你可以使用相對較新的屬性。例如:CallerMemberName。該函數獲取調用者的方法或屬性名稱。

Conditional屬性只是說只在DEBUG編譯中編譯函數。

+0

我讀過這些,但忘記了。該工作,謝謝! – thumbmunkeys