在一个包含许多功能和许多调用的大代码中,我想在屏幕或记录器上打印任何功能的后跟踪,例如:
主调用函数A和A调用调用函数C的函数B.
如果我在功能C上打印,我希望它能打印main::A::B::C - [any parameter value for debugging]
或任何其他格式。
这将帮助我更快地调试我面临的问题。
注意:对于那些会回答我的人,你可以在每个功能上打印,就像我说的很多电话和许多流程一样。
答案 0 :(得分:2)
如果您使用g ++,则可以使用函数backtrace or backtrace_symbols获取堆栈回溯。
挑战是在引发异常的位置捕获堆栈跟踪的内容,然后将其传输到捕获异常的位置。为此,您可以使用Boost.Exception。创建boost :: exception的子类,然后在构造函数中捕获堆栈回溯。稍后,当捕获异常时,您可以打印出跟踪或以其他方式使其可用。
另一个问题是C ++符号名称将被破坏。如果你想让它们可读,你可以调用abi::__cxa_demangle(再次,g ++特定)。
从上面可以看出,答案是特定于平台的。其他编译器和运行时环境可能有类似的解决方案。