【问题标题】:Print n levels of callstack?打印 n 级调用堆栈?
【发布时间】:2010-11-23 10:19:27
【问题描述】:

在 Visual Studio 中使用 C++,我想知道是否有一个 API 可以为我打印调用堆栈。最好,我想打印一个 5 层深的调用堆栈。 windows 是否提供了一个简单的 API 来允许我这样做?

【问题讨论】:

    标签: c++ c visual-studio debugging visual-c++


    【解决方案1】:

    看起来 Microsoft 的 DbgHelp 库可以满足您的需求。有关详细信息,请参阅 MSDN 上的 StackWalk64 函数文档。另外,this CodeProject article 可能有用。

    【讨论】:

      【解决方案2】:

      查看 DbgHelp API 的 Stackwalk 和 Stackwalk64 API。

      【讨论】:

        【解决方案3】:

        我相信你可以从他们的调试器 API (dbghelp) 中得到它。

        【讨论】:

          【解决方案4】:

          有很多方法可以做到这一点。

          How to Log Stack Frames with Windows x64

          在我看来,最简单也是最可靠的方法是 Win32 API 函数:

          USHORT WINAPI CaptureStackBackTrace(
               __in       ULONG FramesToSkip,
               __in       ULONG FramesToCapture,
               __out      PVOID *BackTrace,
               __out_opt  PULONG BackTraceHash
          );
          

          此 FramesToCapture 参数,确定返回的最大调用堆栈深度。

          【讨论】:

          • 这不会生成任何符号信息。一堆指针值有什么用?
          • C/C++ 程序默认从不包含符号信息。有关将符号添加到堆栈转储的方法,请参见此处:drdobbs.com/architecture-and-design/…
          猜你喜欢
          • 2010-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-11
          • 2015-08-25
          • 1970-01-01
          • 2017-08-15
          • 2010-11-05
          相关资源
          最近更新 更多