我正在尝试在 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 非常非常慢...