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

Vio*_*ffe 2 c++ android stack-trace android-ndk

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

问题是Android缺乏backtrace/ backtrace_symbols功能.有没有人找到一种方法来打印stacktrace,比如收到SIGSEGV?

fad*_*den 6

内部完成的方式是使用CallStack类.例如:

CallStack cs("logtag");
Run Code Online (Sandbox Code Playgroud)

将当前本机调用堆栈转储到日志中.不幸的是,这在NDK中不可用,并且该类确实在不同版本之间变化.

在Android KitKit(4.4)中,实现使用了内部libcorkscrew库.在当前的"master"分支中,实现使用libbacktrace,也是一个内部库.然而,这种新的图书馆是建立在libunwind,一个开源项目.

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