我有一个来自Google Play服务的应用崩溃报告,如下所示:
backtrace:
#00 pc 00000000001b46a0 library.so
#01 pc 0000000000604464 library.so
#02 pc 0000000000c8ed1c library.so
我还有一个.map
的{{1}}文件,它可以帮助我找到函数名并将stacktrace转换为更易读的格式:
library.so
但是,手动解析函数名容易出错,并且不会给我行号是导致崩溃的源代码。
我已经考虑过在发布新版本时存储未剥离版本backtrace:
#00 pc 00000000001b46a0 library.so foo()
#01 pc 0000000000604464 library.so bar()
#02 pc 0000000000c8ed1c library.so zoo()
的想法,以便可以使用ndk-stack工具,但是剥离和未剥离二进制文件的AFAIK函数地址是不同的。>
所以我的问题是,有可能继续发布剥离后的二进制文件,并且有办法用行号自动符号化堆栈跟踪吗?
任何建议将不胜感激
答案 0 :(得分:6)
ndk-stack
正是为此目的而构建的,请放心。您将未剥离的 library.so 喂入其中,并获得可以实现的最佳堆栈跟踪!
请确保不要混用调试/发布版本,并为进入生产环境的每个二进制文件保留未剥离的版本(或确保可以可靠地为相应的git标签重建未剥离的版本)。