在Windows上获取C ++程序的堆栈帧

时间:2013-11-04 22:24:39

标签: c++ windows debugging

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

1 个答案:

答案 0 :(得分:0)

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