是否有可能在不抛出异常的情况下获取 Windows 应用商店应用程序中的当前调用堆栈?
我找到了 this answer但它不适用于 Windows 应用商店应用。
我为什么需要这个
我需要获取调用堆栈,因为我有 DirectX 纹理内存泄漏。
我想在分配纹理时将调用堆栈附加到我的纹理。在一些程序使用后,我打印所有未被释放的纹理的调用堆栈。
应该很容易看出我忘记释放纹理的地方。
最佳答案
没有像 .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 版本中编译函数。
关于c# - 获取当前调用栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22514188/