在Windows上为C+获取堆栈帧+;程序 我试图在C++程序中获取堆栈跟踪和符号信息。我遵循本文描述的方法:基本思想是使用DbgHelp库,使用StackWalk64获取堆栈帧的地址

在Windows上为C+获取堆栈帧+;程序 我试图在C++程序中获取堆栈跟踪和符号信息。我遵循本文描述的方法:基本思想是使用DbgHelp库,使用StackWalk64获取堆栈帧的地址,c++,windows,debugging,C++,Windows,Debugging,在我的程序中,主程序加载其他DLL并调用DLL中的函数。当我尝试在主程序中打印_stack()(假设我将实现放在名为print_stack的函数中)时,这种方法会起作用。但是如果我尝试从dll调用print_stack(),结果就没有意义。我尝试在一个调用链的两个位置放置两个print_stack()函数调用。理想情况下,部分打印堆栈帧地址应相同,但实际情况并非如此。因此,我怀疑StackWalk64没有获得正确的堆栈帧地址 以前有人见过这样的问题吗 是否仍然需要知道正确的堆栈帧地址?Visua

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

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


是否仍然需要知道正确的堆栈帧地址?Visual Studio调试器不提供地址信息。WinDbg非常非常慢

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