我有一份来自 Google Play 服务的应用程序崩溃报告,如下所示:
backtrace:
#00 pc 00000000001b46a0 library.so
#01 pc 0000000000604464 library.so
#02 pc 0000000000c8ed1c library.so
我还有一个用于 library.so
的 .map
文件,它可以帮助我找到函数名称并将堆栈跟踪转换为更易读的格式:
backtrace:
#00 pc 00000000001b46a0 library.so foo()
#01 pc 0000000000604464 library.so bar()
#02 pc 0000000000c8ed1c library.so zoo()
但是手动解析函数名称很容易出错,它没有给我行号是导致崩溃的源代码。
我考虑过在发布新版本时存储 library.so
的未剥离版本的想法,这样我就可以使用 ndk-stack工具,但剥离和未剥离二进制文件的 AFAIK 函数地址不同。
所以我的问题是可以继续发布剥离的二进制文件并有办法自动用行号符号化堆栈跟踪吗?
任何建议将不胜感激
最佳答案
ndk-stack
正是为此目的而构建的,不用担心。您将未剥离的 library.so 提供给它,并获得您可以实现的最佳堆栈跟踪!
确保您不混合调试/发布版本,并为每个进入生产的二进制文件保留未剥离版本(或确保您可以为相应的 git 标签可靠地重建此类未剥离版本)。
关于android - 如何符号化剥离的共享库的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695965/