Мне удалось найти способ реализовать это в некоторой степени.
Как указал @ user4581301, я, вероятно, не смогу ничего сделать в случае проблемы с указателем или памяти, которая могла бы вызвать sigsegv
или sigabrt
, как если бы это случилось, главное приложение, вероятно, необратимо прикручен, так что не смог бы сделать что-нибудь полезное удаленно.
Однако, если выдается исключение, которое не перехватывается, я нашел способ его перехватить.
Когда моя библиотека инициализируется, я делаю следующее:
if (currentTerminationHandler == nullptr)
{
currentTerminationHandler = std::get_terminate();
std::set_terminate(&unhandledTerminateHandler);
}
Затем метод unhandledTerminateHandler использует ускоренную трассировку стека в https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace.html, чтобы вернуть зарегистрированную обратную трассировку.
Имейте в виду, что при выполнении этого при работе в Visual Studio VS ловит сбой до запуска обработчика завершения и останавливает запуск триггера завершения, поэтому чтобы обойти это, вам нужно запустить с помощью ctrl + F5, чтобы избежать его запуска внутри VS отладчик.