如何符号化已剥离共享库的堆栈跟踪

阿列克谢·安德罗诺夫(Alexey Andronov)

我有一个来自Google Play服务的应用崩溃报告,如下所示:

backtrace:
  #00  pc 00000000001b46a0  library.so
  #01  pc 0000000000604464  library.so
  #02  pc 0000000000c8ed1c  library.so

我还有一个.map文件,library.so可帮助我找到函数名称并将stacktrace转换为更具可读性的格式:

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标记重建未剥离的版本)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章