我可以利用gcc的回溯功能,在程序的任何给定点获取堆栈跟踪,但我希望在抛出异常时从堆栈所在的任何框架中获取跟踪,即在堆栈展开之前获取跟踪。
例如,以下代码块:
func() {
throw std::exception();
}
try {
func();
}
catch ( std::exception ) {
std::cout << print_trace();
//do stuff
}
需要想办法保留func()的框架。
这个问题之前已经有人问过了,但是那个问题涉及到未处理的异常,会终止程序并且可能没有机会展开调用栈?
是否有一种方法可以在正常捕获和处理异常的情况下实现这一点?
可以采用一种方法,即为所有异常设置一个处理程序,该处理程序除了生成跟踪信息并重新抛出异常外不执行任何操作。理想情况下,我应该能够在Exception类构造函数中生成跟踪信息,但在这里,我不一定能够控制可能遇到的异常。