一般Android NDK出现崩溃之后,我们会使用addr2line工具来进行符号化。如果你使用了C++11的一些特性,那么要注意了,有可能你将得到错误的函数名。我们公司是提供崩溃分析相关的服务的,采集用户的崩溃日志,上传到后台服务器后,会进行符号化操作。之前一直好好的,最近有用户说符号化后的结果不正确,函数名和文件及行号不一致。

这个问题其实蛮奇怪的,要说addr2line可是操作系统级别的工具,无数人使用,不可能出这种低级错误啊。不过为了进一步验证,准备在自己的PC上用addr2line重现一下,结果发现,没有问题,符号化是正确的。又到服务器上测试,发现仍然不对。查看addr2line的版本,发现是不同的,如下所示。

[root@tdata ~]# addr2line --version
GNU addr2line version 2.20.51.0.2-5.42.el6 20100205
Copyright 2009 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.
xxx@xxx-desktop:~/Templates/Tyrion-debug-tusuo$ addr2line --version
GNU addr2line (GNU Binutils for Ubuntu) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.

看来应该是这个问题了,同时操作系统也不同,自己的是Ubuntu,服务器是CentOS。大家都知道,CentOS上的软件一般版本都比较老,而且repo源没有最新版本的更新,需要自己添加源。

首先想是不是将自己PC上的addr2line放到服务器上,就可以解决问题了,因为这个文件是C语言写的二进制文件。结果出现了下面的错误:

[root@tdata ~]# ./addr2line -f -e libgame.so 0x33e17b
./addr2line: error while loading shared libraries: libbfd-2.24-system.so: cannot open shared object file: No such file or directory

查阅了addr2line的源码可以发现,它会引用#include "bfd.h",会依赖libbfdxxx.so。

接着只能从官方下载新版本,再重新编译,进行addr2line的版本升级。官网地址为

ftp://sourceware.org/pub/binutils/snapshots/binutils-2.24.90.tar.bz2,你也可以从git上同步代码下来重新编译。

注意最好到目标机器上进行编译。在升级了addr2line之后,一切正常了。

转载于:https://blog.51cto.com/jazka/1679337

Android NDK使用addr2line符号化得到错误函数名的问题相关推荐

  1. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )

    文章目录 一.从 Tombstone 报错日志中查找报错动态库 二.addr2line 命令行工具使用 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工 ...

  2. Android NDK 中堆栈日志 add2line 的分析实践

    文章目录 目的 常用的辅助工具 分析步骤 参考 目的 Android NDK 中出现的 crash 日志分析定位,使用 addr2line 对库中定位so 动态库崩溃位置,定位到某个函数的具体的代码行 ...

  3. Android NDK 面试题汇总

    一.谈谈你对 JNI 和 NDK 的理解 JNI: JNI 是 Java Native Interface 的缩写,即 Java 的本地接口. 目的是使得 Java 与本地其他语言(如 C/C++)进 ...

  4. Android NDK基础样例

    Android NDK基础样例 NDK(Native Development Kit),用C/C++封装一些东西?好像就这么理解好了== 一.环境准备 这个好讨厌==!因为我环境都已经搭了很久了. 已 ...

  5. windows系统上安装与使用Android NDK

    转自http://www.cnblogs.com/luxiaofeng54/archive/2011/02/12/1952391.html 很早就听说了android的NDK应用,只是一直没有时间去研 ...

  6. ugui 转轮_Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)...

    开始本篇文章之前我先为大家简单的介绍一下Android NDK编程的原理, 我们知道Android开发使用JAVA语言来编程它的运行效率要比C/C++低很多,为了让JAVA语言可以调用 C/C++ 这 ...

  7. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  8. Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)

    以前做Android的项目要用到NDK就必须要 下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量... 麻烦到不想 ...

  9. linux android ndk r9b JNI 开发过程(COCOS2D-X配置)

    我是小白 折腾了两天了. 终于成功第一次运行- 网上一堆教程乱死了然后其实现在android官方已经认定NDK为必要开发环境所以现在的配置其实很简单 另外Cocos2d-x的编译真是奇怪死了对一个只把 ...

最新文章

  1. Opencv java 二值化函数threshold (10)
  2. 把文件自动add_【Blender】常用Add-Ons
  3. __iter__ 和 __next__
  4. S3C2443时钟管理
  5. opencv 检测 键盘_ubuntu+vscode 测试运行opencv
  6. 《手机测试Robotium实战教程》——导读
  7. 人体反应测试仪 c语言,人体反应速度测试仪毕业设计说明
  8. Java StreamTokenizer quoteChar()方法与示例
  9. 作者:李海林,博士,华侨大学信息管理系副教授、硕士生导师。
  10. 软件工作相关考试001---PMP等各种考试
  11. python 干什么工作具有明显优势-科多大数据告诉你Python为什么这么牛?学习python有什么优势?...
  12. c语言求前缀后缀大全,温故而知新_C语言_前缀++(--)和后缀++(--)
  13. Ubuntu 手动更新firefox的flash插件
  14. python 抓取 快代理-国内普通代理 IP
  15. 麻省理工18年春软件构造课程阅读04“代码评审”
  16. 工程师一定要有 “Owner 意识”
  17. springbootsecurity实现权限管理详细步骤
  18. 第844期机器学习日报(2017-01-09)
  19. MyBatis遇到:There is no getter for property named ‘Xxx‘ in ‘class xxx.xxx.Xxx‘问题
  20. P1122 最大子树和

热门文章

  1. android线程池断点续传,Android之多线程下载及断点续传
  2. word 为数学公式添加编号
  3. 8种方法优雅地利用C++编程从1乘到20
  4. 大数据可视化的最新动态
  5. 手机一秒变智能遥控器,遥控所有家电
  6. kde重启_我可以在不注销的情况下重新启动KDE Plasma桌面吗?
  7. Beanstalkd 的 使用
  8. 为后台面试做准备!!!一定能过!!!!
  9. 操作系统:电梯调度算法代码演示
  10. Android架构组件(三)——ViewModel