是否有可能在Windows应用商店中获取当前的调用堆栈,而不会抛出异常?
我找到了this answer,但它并不适用于Windows应用商店。
为什么我需要这个
我需要调用堆栈,因为我有一个DirectX纹理内存泄漏。
我想在分配它时将调用堆栈附加到我的纹理。在一些程序使用之后,我打印了尚未解除分配的所有纹理的callstack。
应该很容易看到我忘记取消分配纹理的位置。
答案 0 :(得分: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版本中的函数。