【问题标题】:Getting stack frames on Windows for C++ program在 Windows 上为 C++ 程序获取堆栈帧
【发布时间】:2013-11-04 22:24:39
【问题描述】:

我正在尝试在 C++ 程序中获取堆栈跟踪和符号信息。我按照这篇文章描述的方法:http://code-freeze.blogspot.com/2012/01/generating-stack-traces-from-c.html基本思路是使用DbgHelp库,使用StackWalk64获取栈帧的地址。

在我的程序中,主程序加载其他dll并调用dll中的函数。当我尝试在主程序中使用 print_stack()(假设我将实现放在名为 print_stack 的函数中)时,该方法有效。但是,如果我尝试从 dll 调用 print_stack(),则结果没有意义。我试图将两个 print_stack() 函数调用放在一个调用链上的两个位置。理想情况下,打印的堆栈帧地址的一部分应该相同,但事实并非如此。所以我怀疑 StackWalk64 没有获得正确的堆栈帧地址。

以前有人见过这样的问题吗?

有没有办法知道正确的堆栈帧地址? Visual Studio 调试器不提供地址信息。 WinDbg 非常非常慢...

【问题讨论】:

    标签: c++ windows debugging


    【解决方案1】:

    我不了解 VS,但是在 WinDBG 中,您可以通过 kv 命令或通过在调用堆栈窗口中启用地址来打印带有地址的调用堆栈。如果使用 -snul 选项启动 WinDbg(或取消选中 Debug 菜单下的 Resolve Unqualified Symbols),WinDbg 会快很多

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多