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

简介:

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

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

1
2
3
4
5
6
[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.
1
2
3
4
5
6
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语言写的二进制文件。结果出现了下面的错误:

1
2
[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。



本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/1679337,如需转载请自行联系原作者
相关文章
|
9月前
|
数据采集 编解码 Ubuntu
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
218 0
|
2天前
|
Android开发
Android构建系统:Android.mk(2)函数详解
Android构建系统:Android.mk(2)函数详解
11 1
|
2月前
|
Java Android开发 C++
安卓SO层开发 -- 第一个NDK项目
安卓SO层开发 -- 第一个NDK项目
16 0
|
2月前
|
算法 Java Android开发
安卓逆向 -- NDK开发实现MD5算法
安卓逆向 -- NDK开发实现MD5算法
34 0
|
4月前
|
Java 编译器 开发工具
Android StudioJNI开发之NDK环境的搭建以及添加JNI支持(图文解释 简单易懂)
Android StudioJNI开发之NDK环境的搭建以及添加JNI支持(图文解释 简单易懂)
34 0
|
5月前
|
网络协议 NoSQL Unix
[√]Android NDK调试启动分析LLDB-SERVER
[√]Android NDK调试启动分析LLDB-SERVER
124 0
|
5月前
|
存储 IDE 开发工具
[√]Android studio 调试ndk
[√]Android studio 调试ndk
248 0
|
5月前
|
Java Android开发
[√]Android NDK 编译报错
[√]Android NDK 编译报错
44 0
|
6月前
|
Android开发 C++
[资料]android ndk编译
[资料]android ndk编译
|
9月前
|
编解码 Ubuntu Java
Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
199 0