如何在Android上打印堆栈跟踪(带有符号函数名)?

如何在Android上打印堆栈跟踪(带有符号函数名)?,android,c++,android-ndk,stack-trace,Android,C++,Android Ndk,Stack Trace,这个问题已经被问了很多次,但从来没有得到真正的回答。我今天花了5到6个小时尝试将一些库移植到Android(libunwind,liwdfl),这些库可能从未打算在ARM上工作。当然没有用 问题是Android缺少backtrace/backtrace\u符号功能。是否有人找到了打印stacktrace的方法,例如,在收到SIGSEGV时?这是在类内部完成的。例如: CallStack cs("logtag"); 将当前本机调用堆栈转储到日志。不幸的是,这在NDK中不可用,并且类确实会随着版本

这个问题已经被问了很多次,但从来没有得到真正的回答。我今天花了5到6个小时尝试将一些库移植到Android(libunwind,liwdfl),这些库可能从未打算在ARM上工作。当然没有用


问题是Android缺少
backtrace
/
backtrace\u符号
功能。是否有人找到了打印stacktrace的方法,例如,在收到SIGSEGV时?

这是在类内部完成的。例如:

CallStack cs("logtag");
将当前本机调用堆栈转储到日志。不幸的是,这在NDK中不可用,并且类确实会随着版本的变化而变化

在Android KitKit(4.4)中,使用了内部库。在当前的“master”分支中,使用的也是一个内部库。然而,这个新图书馆是建立在一个


因此,你应该能够将libunwind构建到你的应用程序中,并以这种方式使用它。由于这些库已经在Android上使用,因此移植问题应该小得多(只需从AOSP源代码开始)。

我查看了
CallStack
类,没有发现一种方法可以在不编译一半AOSP存储库的情况下编译它。但如果没有更好的方法,我想我会尝试一下。我想从AOSP中提取外部/libunwind并在其上构建调用堆栈式的东西会更有意义。“external”中的内容通常与其他内容没有明显的依赖关系,而且您知道它已经被移植到Android上。您知道它是否可以将地址解析为符号名吗?因为如果没有,我就不应该在上面浪费时间。我自己也没有用过它,但文档似乎说它用过,例如。