Я могу использовать обратную трассировку gcc для получения трассировки стека в любой заданной точке программы, но я хотел бы получить трассировку из любого фрейма, в котором находился стек во время создания исключения, то есть доразматывание стека.
Например, следующий блок
func() {
throw std::exception();
}
try {
func();
}
catch ( std::exception ) {
std::cout << print_trace();
//do stuff
}
должен по-прежнему иметь возможность каким-то образом сохранять фрейм для функции func ().
Это было спросил раньше , но он включал необработанное исключение, которое могло бы завершить программу и, по-видимому, не давало стекам вызова возможность размотаться?
Есть ли способ сделать это, все еще будучи в состоянии перехватитьи обработать исключение нормально?
Может существовать такой подход, как использование обработчика для всех исключений, который ничего не делает, кроме как генерирует трассировку и повторно генерирует исключения.В идеале я должен иметь возможность генерировать трассировки внутри конструкторов класса Exception, но здесь я не обязательно имею контроль над исключениями, которые могут встречаться.