thu*_*eys 1 c# callstack windows-8 windows-runtime windows-store-apps
是否有可能在Windows应用商店中获取当前的调用堆栈,而不会抛出异常?
我找到了这个答案,但它不适用于Windows应用商店.
为什么我需要这个
我需要得到调用堆栈,因为我有一个DirectX纹理内存泄漏.
我想在分配它时将调用堆栈附加到我的纹理.在一些程序使用之后,我打印了尚未解除分配的所有纹理的callstack.
应该很容易看到我忘记取消分配纹理的位置.
没有记录的方法来获取对.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));
}
Run Code Online (Sandbox Code Playgroud)
使用...
Log("hello!");
Run Code Online (Sandbox Code Playgroud)
会产生:
hello! MainPage_Loaded:45 (c:\Dev\Projects\Win8AppTest\MainPage.xaml.cs)
Run Code Online (Sandbox Code Playgroud)
上面的函数使用了几个可以使用的相对较新的属性.例如:CallerMemberName.该函数获取调用者的方法或属性名称.
该Conditional属性只是说只在DEBUG构建中编译函数.