c# - 获取当前调用栈

标签 c# windows-8 windows-runtime windows-store-apps callstack

是否有可能在不抛出异常的情况下获取 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/

相关文章:

c# - knockout 下拉列表数据绑定(bind)在 ajax 调用中不起作用

c# - 如何使用 Foreach 遍历集合来构建 XDocument?

xaml - 在 UWP 应用程序中覆盖 Pivot 标题前景画笔(Win 10 RTM SDK)

c# - 就良好的编程而言,使用键枚举或 Ascii 代码更好?

.net - 在 Windows 8 Metro 风格的 c# 应用程序上捕获 Enter 和空格键

windows-8 - 最小的 Windows 8 C++ XAML 应用程序?

windows-8 - WinJS.Application.sessionState 真正存储的内容

c# - Toast 通知不起作用?

windows-8 - WinRT 应用程序可以在屏幕关闭时继续运行吗?

c# - 剪切图像 EmguCV