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