assert
在发布模式下失败时,是否可以输出调用堆栈?
当assert
在调试模式下失败时,我可以在Visual Studio中看到调用堆栈。我已经编译了 Release 模式并删除了NDEBUG
,以便编译断言。当此assert
失败时,断言参数将打印到控制台上。如果我能以某种方式获得调用堆栈的输出,那将非常有用。
答案 0 :(得分:2)
有两个功能应该有所帮助:CaptureStackBackTrace和StackWalk64(需要Dbghelp.dll,这里是an example)。
无论如何,它们都只返回返回地址的列表,因此必须手动将它们解析为函数名。您可以将VS设置为生成MAP文件,其中包含可执行文件中所有函数的地址。这是how。
另外,不要忘记某些功能可能(并且将会)内联。因此,当A -> B -> C
代替A -> C
来电话时,不要感到惊讶。