我想提供一个通用调用堆栈函数作为库 (.so) 的一部分,使用libunwind
. 但是,与 .so 链接的可执行文件在我链接到 .so 后立即开始失败libunwind
。据我了解,我遇到的问题是libunwind
定义了与 GCC 运行时相同的符号,但实现似乎不兼容。
静态或动态链接libunwind
不会改变任何东西,我在抛出异常时_Unwind_Resume
(如果静态链接)会出现段错误,否则调用堆栈开始于__cxa_throw
(可能之前已经损坏。)
有趣的是,只有当我使用 GCC 和 Clang 时才会出现问题,一切正常。
是否可以libunwind
在共享库中使用?如果没有,是否有另一个库可以让我获得堆栈上函数的名称和指令指针偏移量?backtrace()
几乎足够好,但是backtrace_symbols()
做了太多的格式化,我必须先“取消解析”。