【发布时间】:2013-01-31 18:32:49
【问题描述】:
我需要从 C++ 应用程序中获取堆栈跟踪,并将其序列化为字符串,以便稍后对其进行解析。我在 Windows 上听说过的唯一 API 是 StackWalk64,它似乎不受支持。
如何在 Windows 应用商店应用程序中从 C++ 获取堆栈跟踪?
【问题讨论】:
-
这是不可能的。 C++ 代码被过度优化以允许可靠的堆栈遍历。您使用小型转储诊断 C++ 崩溃。在商店应用中很难找到。
-
用户可以选择让 Windows 在应用程序崩溃时发送崩溃转储。然后,您可以在仪表板中看到故障转储,以便下载并在调试器中打开它。
-
这在 C# 代码中也是不可能的。内联和尾调用将使您的堆栈遍历完全不可靠。由于这个原因,GetCallingAssembly 及其相关的 C# 调用已从 Windows 8 .NET 配置文件中删除。 dbghelp.dll 是功能所在的位置,是的,Windows 8 应用商店应用程序不支持它。如果您愿意,请继续申请,但在我的书中有一长串优先级更高的东西:-)
-
@HansPassant 实际上在 Windows CE(C++ 应用程序)下我能够获得非常好的 .exe-s 版本的堆栈跟踪。我使用地图文件和 GetThreadCallStack 函数。
标签: c++ exception windows-runtime stack-trace windows-store-apps