c ++ stacktrace из функции, вызывающей исключение?

Я могу использовать трассировку gcc для получения трассировки стека в любой заданной точке программы, но я хотел бы получить трассировку из любого кадра, в котором находился стек в то время, когда генерируется исключение, то есть до стека. раскручивание.

Например, следующий блок

func() {
  throw std::exception();
}

try {
  func();
}
catch ( std::exception ) {
  std::cout << print_trace();
  //do stuff
}

должен каким-то образом сохранять фрейм для func ().

Это было запрошено раньше , но оно включало необработанное исключение это привело бы к завершению программы и, предположительно, не дало бы стеку вызовов возможности расслабиться?

Есть ли способ сделать это, сохраняя при этом возможность перехвата и обработки исключения в обычном режиме?

Может быть такой подход, как наличие обработчика для всех исключений, который ничего не делает, кроме генерации трассировки и повторной генерации исключений. В идеале я должен иметь возможность генерировать трассировки в конструкторах класса Exception, но здесь я не обязательно могу контролировать исключения, которые могут возникнуть.

5
задан Community 23 May 2017 в 12:12
поделиться