Я хочу предоставить универсальную функцию стека вызовов как часть библиотеки (.so), используя libunwind
, Тем не менее, исполняемые файлы, связанные с .so начинают сбой, как только я ссылаюсь на libunwind
, Насколько я понимаю, проблема, с которой я сталкиваюсь, заключается в том, что libunwind
определяет те же символы, что и среда выполнения GCC, но реализация, по-видимому, не совместима.
Связь статически или динамически против libunwind
ничего не меняет, я получаю segfault при выдаче исключения в _Unwind_Resume
(если связаны статически), в противном случае стек вызовов начинается с __cxa_throw
(предположительно, он был поврежден раньше.)
Интересно, что проблемы возникают только когда я использую GCC, с Clang все работает просто отлично.
Можно ли использовать libunwind
внутри общей библиотеки? Если нет, есть ли другая библиотека, которая позволяет мне получить смещение указателя имени и указателя на функции в стеке? backtrace()
почти достаточно хорош, но backtrace_symbols()
делает слишком много форматирования, которое я должен был бы сначала «разобрать».
Задача ещё не решена.