如何使用arm-linux-androideabi-addr2line
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用arm-linux-androideabi-addr2line相关的知识,希望对你有一定的参考价值。
1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如:export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
2.使配置生效:source ~/.bashrc
3.使用工具。例如:arm-linux-androideabi-addr2line -C -f -e ~/workspace/DLNA/libs/armeabi/libctrlpt.so 0003deb4
其中,0003deb4为堆栈信息中pc的值。
android应用崩溃的调试方法
有两种方法可以分析 crash 的堆栈信息
1 google提供了一个python脚本,可以从
http://code.google.com/p/android-ndk-stacktrace-analyzer/
下载这个python脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,
使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面
把so或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm,
使用脚本
python parse_stack.py <asm-file> <logcat-file>
2 直接使用NDK下面的arm-linux-androideabi-addr2line
(D:\\android-ndk-r8\\toolchains\\arm-linux-
androideabi-4.4.3\\prebuilt\\windows\\bin\\arm-linux-androideabi-addr2line.exe)
例如:arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address)
android调试工具addr2line使用补充
使用addr2line追踪自有动态库(so文件)的bug, 补充:
解决出现 ??:0 , 没法展示源代码行数的问题
在Android.mk 文件中:
Java代码
LOCAL_CFLAGS
:=
-D__STDC_CONSTANT_MACROS
-Wl,-Map=test.map
-g
补充2个编译参数 -Wl,-Map=test.map -g .
增加gcc警告和调试标志
arm-linux-androideabi-addr2line -C -f -e /项目目录/obj/local/armeabi/libfaa_jni.so 0024362e
tip: 1,注意调试文件的位置在obj目录下,并非libs目录下生成的so文件
2,0024362e 为出错的机制位置
还有:
在jni/目录下增加Application.mk 文件, 修改为debug 模式,进行调试 APP_OPTIM := debug 参考技术A 明显:arm-linux-androideabi-g++找进入目录:prebuilt/linux-x86/ccache/ccache prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/ 看否文件或链接文件: arm-linux-androideabi-addr2line arm-linux-androideabi-gprof arm-linu... 参考技术B 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如:
export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
2.使配置生效:source ~/.bashrc
3.使用工具。例如:arm-linux-androideabi-addr2line -C -f -e ~/workspace/DLNA/libs/armeabi/libctrlpt.so 0003deb4
其中,0003deb4为堆栈信息中pc的值。
android应用崩溃的调试方法
有两种方法可以分析 crash 的堆栈信息
1 google提供了一个python脚本,可以从
http://code.google.com/p/android-ndk-stacktrace-analyzer/
下载这个python脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,
使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面
把so或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm,
使用脚本
python parse_stack.py <asm-file> <logcat-file>
2 直接使用NDK下面的arm-linux-androideabi-addr2line
(D:\android-ndk-r8\toolchains\arm-linux-
androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe)
例如:arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address)
android调试工具addr2line使用补充
使用addr2line追踪自有动态库(so文件)的bug, 补充:
解决出现 ??:0 , 没法展示源代码行数的问题
在Android.mk 文件中:
Java代码
LOCAL_CFLAGS
:=
-D__STDC_CONSTANT_MACROS
-Wl,-Map=test.map
-g
补充2个编译参数 -Wl,-Map=test.map -g .
增加gcc警告和调试标志
arm-linux-androideabi-addr2line -C -f -e /项目目录/obj/local/armeabi/libfaa_jni.so 0024362e
tip: 1,注意调试文件的位置在obj目录下,并非libs目录下生成的so文件
2,0024362e 为出错的机制位置
还有:
在jni/目录下增加Application.mk 文件, 修改为debug 模式,进行调试 APP_OPTIM := debug
libz.so.1:无法打开共享对象文件
【中文标题】libz.so.1:无法打开共享对象文件【英文标题】:libz.so.1: cannot open shared object file 【发布时间】:2014-02-10 23:20:24 【问题描述】:我在 ubuntu 12.04 上遇到了一个问题:
/usr/lib/ndk/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/。 ./../../../arm-linux-androideabi/bin/as: 加载共享库时出错:libz.so.1:无法打开共享 目标文件:没有这样的文件或目录
我试过了
sudo apt-get install lib32z1
但它说
读取包列表...完成构建依赖树读取 状态信息... 完成 lib32z1 已经是最新版本。 0 已升级,0 个新安装,0 个要移除,610 个未升级。
请提出解决方案。
【问题讨论】:
【参考方案1】:这对我有用
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
【讨论】:
对于 CentOS,我需要同时安装 zlib 和 libgcc。百胜安装 zlib.i686 libgcc【参考方案2】:检查 libz.so.1 属于哪个包 (http://packages.ubuntu.com/lucid/i386/zlib1g/filelist) 后,您应该尝试安装 zlib1g:
sudo apt-get install zlib1g
正如@E-rich 所指出的,可能需要在包名称中添加一个 :i386 后缀,以便包管理器正确识别它:
sudo apt-get install zlib1g:i386
EDIT(用于 CentOS 或其他使用 yum
的发行版):
如果有人使用 CentOS(或任何其他使用 yum
的发行版)最终可能会阅读此问题,@syslogic 在 cmets 中提出了以下解决方案:
yum install zlib.i686
或者,对于 32 位二进制文件:
yum install zlib.i386
【讨论】:
这对我有用,只是做了一个小改动:sudo apt-get install zlib1g:i386
@Palak yum install zlib.i686
经过这么多搜索终于。 sudo apt-get install zlib1g:i386 工作。
2016 年 5 月,安装 zlib1g:i386 仍然适用于 ubuntu 15.10。 +1
Android Studio 2.2.3,Oracle Java 8,Android Build-Tools 23.0.2 in Ubuntu 16.04.1 amd64,这对我有用sudo apt-get install zlib1g:i386
【参考方案3】:
我已经下载了这些包:
libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 zlib1g然后我解压它们并将目录添加到我的~/.bashrc
中的LD_LIBRARY_PATH
。只需确保在路径中添加正确的目录即可。
【讨论】:
说实话 - 我不知道。我刚刚做了find `pwd` -type d | xargs | tr " " ":"
来生成所有子目录的完整列表。但可能有一些文档可以准确地说明它们是什么。我的时间很短,所以我不得不猜测:-)【参考方案4】:
查看以下链接: 特别是“安装 32 位库(如果您使用 64 位)”
https://github.com/meteor/meteor/wiki/Mobile-Dev-Install:-Android-on-Linux
【讨论】:
这终于对我有用了“sudo apt-get update; sudo apt-get install --yes lib32z1 lib32stdc++6”【参考方案5】:sudo apt-get install zlib1g:i386 在 Xubuntu 16.04 上修复了 Android 2.1.1 上的 Gradle 问题。
【讨论】:
【参考方案6】:对于 Fedora(可能对某人有用)
sudo dnf install zlib-1.2.8-10.fc24.i686 libgcc-6.1.1-2.fc24.i686
【讨论】:
【参考方案7】:对于 centos,只是 zlib 没有解决问题。我做到了
sudo yum install zlib-devel.i686
【讨论】:
【参考方案8】:对于 Arch Linux,它是来自 multilib 的 pacman -S lib32-zlib
,而不是 zlib
。
【讨论】:
以上是关于如何使用arm-linux-androideabi-addr2line的主要内容,如果未能解决你的问题,请参考以下文章
关于Android报找不到arm-linux-androideabi的错误
关于Android报找不到arm-linux-androideabi的错误
Fultter 实战No toolchains found in the NDK toolchains folder for ABI arm-linux-androideabi
Fultter 实战No toolchains found in the NDK toolchains folder for ABI arm-linux-androideabi