如何在Android上打印堆栈跟踪(带符号功能名称)?
作者:互联网
这个问题已被多次询问,但它从未得到过真正的回答.我今天花了5到6个小时试图将一些库移植到Android(libunwind,liwdfl),这些库可能从未打算用于ARM.当然无济于事.
问题是Android缺少backtrace / backtrace_symbols函数.有没有人找到一种方法来打印stacktrace,比如收到SIGSEGV?
解决方法:
内部完成的方式是使用CallStack类.例如:
CallStack cs("logtag");
将当前本机调用堆栈转储到日志中.不幸的是,这在NDK中不可用,并且该类确实在不同版本之间变化.
在Android KitKit(4.4)中,implementation使用了内部libcorkscrew库.在当前的“主”分支中,implementation使用libbacktrace,也是内部库.但是,这个新的库建立于libunwind,open-source project.
所以你应该能够将libunwind构建到你的应用程序中并以这种方式使用它.由于这些库已经在Android上使用,因此移植应该不是问题(只需从AOSP external/libunwind源开始).
标签:android,c,android-ndk,stack-trace 来源: https://codeday.me/bug/20191008/1875161.html