Visual C ++:在断言失败时调用堆栈

时间:2010-12-24 05:28:39

标签: visual-c++ assert callstack

assert发布模式下失败时,是否可以输出调用堆栈

assert调试模式下失败时,我可以在Visual Studio中看到调用堆栈。我已经编译了 Release 模式并删除了NDEBUG,以便编译断言。当此assert失败时,断言参数将打印到控制台上。如果我能以某种方式获得调用堆栈的输出,那将非常有用。

1 个答案:

答案 0 :(得分:2)

有两个功能应该有所帮助:CaptureStackBackTraceStackWalk64(需要Dbghelp.dll,这里是an example)。

无论如何,它们都只返回返回地址的列表,因此必须手动将它们解析为函数名。您可以将VS设置为生成MAP文件,其中包含可执行文件中所有函数的地址。这是how

另外,不要忘记某些功能可能(并且将会)内联。因此,当A -> B -> C代替A -> C来电话时,不要感到惊讶。