如何在Android上打印堆栈跟踪(带符号功能名称)?

时间:2014-01-23 12:47:33

标签: android c++ android-ndk stack-trace

这个问题已被多次询问,但它从未得到过真正的回答。我今天花了5到6个小时试图将一些库移植到Android(libunwind,liwdfl),这些库可能从未打算用于ARM。当然无济于事。

问题是Android缺少backtrace / backtrace_symbols个功能。有没有人找到一种方法来打印堆栈跟踪,比如收到SIGSEGV?

1 个答案:

答案 0 :(得分:6)

这在内部完成的方式是使用CallStack类。例如:

CallStack cs("logtag");

会将当前本机调用堆栈转储到日志中。不幸的是,这在NDK中不可用,并且该类确实从版本更改为版本。

在Android KitKit(4.4)中,implementation使用了内部libcorkscrew库。在当前的#34;大师"分支,implementation使用libbacktrace,也是内部库。但是,这个新库是基于libunwind构建的open-source project

所以你应该能够在你的应用程序中构建libunwind并以这种方式使用它。由于这些库已经在Android上使用,因此移植应该不是问题(只需从AOSP external/libunwind源开始)。