【问题标题】:less stacks using StackWalk64使用 StackWalk64 减少堆栈
【发布时间】:2026-01-12 08:55:01
【问题描述】:

我构建了 test.exe,它会崩溃并使用 MinidumpWriteDump 生成 .dmp 文件,而 parser.exe 用于从该 dmp 文件中读取和打印信息。

在 parser.exe 中,我使用 StackWalk64 来获取该 dmp 文件中所有线程的所有堆栈跟踪。 但是现在我发现我只能得到比视觉工作室更少的堆栈。

我已经尝试了所有可以在 google、*、codeproject 中找到的解决方案,没有任何改变。

parser.exe 的作用如下:

  1. SymInitialize
  2. MiniDumpReadDumpStream 读取所有信息
  3. SymLoadModuleEx 和 SymFindFileInPath 加载 .dmp 文件中指定的 pdb/exe/dll
  4. 初始化 STACKFRAME64 并循环调用 StackWalk64。

我想知道如何获得与 Visual Studio 相同的堆栈数。 如果需要,我可以在此处粘贴更多代码。 任何帮助将不胜感激。

【问题讨论】:

    标签: windows stack trace dbghelp


    【解决方案1】:

    StackWalk64 不够健壮,无法跟踪完整的堆栈跟踪,尤其是经过优化的帧。 (例如,请参阅这个 * 问题here)。

    最好的方法是实际使用WinDbg 提供的调试引擎。这里有几篇博文展示了如何使用调试引擎 API:

    【讨论】:

    • 谢谢,有用的提示。