使用arm-eabi-addr2line工具跟踪Android调用堆栈

android手动触发ke,手机重启问题快速分析定位指南 #####阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、 AEE 系统机制简介 二、AEE 重启异常分类介绍 三、重启问题快速分析归类指南之 Kernel Exception 四、重启问题快速分析归类指南之 Watchdog Timeout 五、重启问题快速分析归类指南之 Hard... 阅读详情
使用arm-eabi-addr2line工具跟踪Android调用堆栈
作者:liangshengyang
转自: http://www.linuxidc.com/Linux/2011-01/31803.htm

在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的handler中,调用libc的backtrace,打出对应的堆栈信息,很快就能找到问题所在。但在Android中,bionic并不提供类似功能,而且log信息是走的loger,通过logcat才可以看到。但是android也会输出log信息,象下面这样:

02-08 10:36:32.076: INFO/DEBUG(1261): pid: 1959, tid: 1959  >>> Android.radio <<<
02-08 10:36:32.076: INFO/DEBUG(1261): signal 11 (SIGSEGV), fault addr 00198080
02-08 10:36:32.076: INFO/DEBUG(1261):  r0 00198080  r1 81116dac  r2 ffffffea  r3 00000000
02-08 10:36:32.086: INFO/DEBUG(1261):  r4 8111a9f0  r5 0000000a  r6 00000888  r7 0000000a
02-08 10:36:32.086: INFO/DEBUG(1261):  r8 735f6d66  r9 525f6474  10 4104bcd8  fp 00000000
02-08 10:36:32.086: INFO/DEBUG(1261):  ip a0000000  sp bec1a300  lr 81112561  pc 81109124  cpsr 80010010
02-08 10:36:32.306: INFO/DEBUG(1261):          #00  pc 00009124  /system/lib/libfmradio_jni.so
02-08 10:36:32.306: INFO/DEBUG(1261):          #01  pc 0001255c  /system/lib/libfmradio_jni.so
02-08 10:36:32.306: INFO/DEBUG(1261):          #02  pc 0000c93e  /system/lib/libfmradio_jni.so
02-08 10:36:32.316: INFO/DEBUG(1261):          #03  pc 0000ae14  /system/lib/libfmradio_jni.so
02-08 10:36:32.316: INFO/DEBUG(1261):          #04  pc 00008a72  /system/lib/libfmradio_jni.so
02-08 10:36:32.316: INFO/DEBUG(1261):          #05  pc 00006c22  /system/lib/libfmradio_jni.so
02-08 10:36:32.326: INFO/DEBUG(1261):          #06  pc 00004d92  /system/lib/libfmradio_jni.so
02-08 10:36:32.326: INFO/DEBUG(1261):          #07  pc 0000e434  /system/lib/libdvm.so

通常编译Android代码时,出于size的考虑,剔除了符号信息。但我们可以使用编译时生成的二进制文件(转注:含有符号信息的文件,通常位于./out/target/product/[PROJECT]/symbols/system/lib/目录),获取其符号信息,从而得到调用堆栈:

$ ./prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-addr2line -f -e ./out/target/product/[PROJECT]/symbols/system/lib/libfmradio_jni.so 0000960c 000129ec 0000cdce 0000b2a4 00009496 00008258 000054f6
non_congruent
bionic/libc/arch-arm/bionic/memcpy.S:229
__sfvwrite
bionic/libc/stdio/fvwrite.c:151
__sprint
bionic/libc/stdio/vfprintf.c:71
printf
bionic/libc/stdio/printf.c:44
fm_std_Power
frameworks/base/fmradio/jni/../../../../external/.../fmradio/fmapi/fm_std_api.c:144
_Z11fm_SwitchOnv
frameworks/base/fmradio/jni/fm_functions.cpp:95
radio_SwitchOn
frameworks/base/fmradio/jni/native.cpp:41
yang@Ubuntu$ c++filt _Z11fm_SwitchOnv
fm_SwitchOn()

通过这种方式,即可得到调用堆栈信息,找出问题所在。



-------------------------------------------------------------------------------------------------------------------
方法二
-------------------------------------------------------------------------------------------------------------------
cat logcat_3.log | ndk-stack -sym ~/[SOURCE-DIR]/out/target/product/[PROJECT]/symbols/system/lib/


-------------------------------------------------------------------------------------------------------------------
方法三
-------------------------------------------------------------------------------------------------------------------
转自:http://www.cppblog.com/fwxjj/archive/2011/09/30/157242.aspx

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>

native调用栈分析 1. addr2line命令 addr2line -h 可以查看命令使用帮助: 一般命令使用方式:addr2line -e 可执行程序文件 -f -C address 比如下面一个调用栈打印,这是在surfaceflinger模块的启动入口:main_surfaceflinger.cpp的main方法中打印的: 01-01 08:00:08.030 2981 2981 D surfaceflinger start: #00 pc 00002875 /system/bin/surfac.. 阅读详情

相关推荐

Keil对lib封装库反汇编成C语言.pdf

Keil对lib封装库反汇编成C语言.pdf

lib静态库逆向分析

当我们要分析一个lib库里的代码时,首先需要判断这是一个静态库还是一个导入库。库类型判断 lib文件其实是一个压缩文件。我们可以直接使用7z打开lib文件,以查看里面的内容。如果里面的内容是obj文件,表明是静态库。如果里面的内容是dll文件,表明是导入库。导入库里面是不包含代码的,代码包含在对应的dll文件中。从lib中提取obj 静态库是一个或者多个obj文件的打包,这里有两个方法从中提取obj:Microsoft 库管理器 7z解压 Microsoft 库管理器(lib.exe) Microsoft

whl0071的专栏 5466

MTK平台TP驱动设备树与GPIO配置实战解析

本文详细解析了MTK平台TP驱动开发中的设备树与GPIO配置实战。通过DCT工具配置GPIO引脚,结合设备树节点定义触摸参数,并分享驱动移植、编译调试技巧及常见问题解决方案,帮助开发者快速掌握MTK触摸驱动开发核心。

ice55的博客 234

lib库反编译C语言,C语言静态链接库(lib)与动态链接库(dll)

今天看到了之前的笔记,看到之前写的笔记,感觉自己都不认得了~~一、静态链接库(lib)首先创建 “在VC6中创建项目:Win32 Static Library”在项目中创建两个文件:xxx.h 和 xxx.cpp头文件的话就写函数声明,cpp正常来写函数实现即可!例如:[C] 纯文本查看 复制代码x.h代码:int Plus(int x,int y);x.cpp代码 int Plus(in...

weixin_39758712的博客 4988

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

用Python和NumPy可视化理解波函数:从概率密度到薛定谔方程的可视化教程

本文通过Python和NumPy实现量子力学波函数的可视化,从概率密度到薛定谔方程的动态演化,帮助读者直观理解量子态的特性。教程涵盖无限深势阱、量子谐振子等模型,结合代码示例展示时间演化和期望值计算,为量子力学学习提供实用工具。

weixin_27303545的博客 226

使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈

使用arm-eabi-addr2line工具跟踪Android调用堆栈 作者:liangshengyang 转自:http://www.linuxidc.com/Linux/2011-01/31803.htm 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的hand

暧暧远人村,依依墟里烟 ... 1万+

基于STM32和MPU6050的手势控制小车设计与实现

MPU6050传感器:用于检测手势变化,采集加速度和陀螺仪数据。STM32微控制器:处理MPU6050传感器的数据,根据手势变化控制小车的运动。电机驱动模块:接收来自STM32的控制信号,驱动小车的电机,实现小车的前进、后退、左转和右转。小车底盘:作为整个系统的机械部分,提供移动平台。MPU6050是一款集成了3轴加速度计和3轴陀螺仪的传感器,具有高精度、低功耗和小体积等特点。它通过I2C接口与微控制器通信,可以实时采集加速度和角速度数据,广泛应用于运动检测、姿态控制和手势识别等领域。

m0_57781768的博客 2309

arm-eabi-addr2line工具跟踪Android调用堆栈

使用arm-eabi-addr2line工具跟踪Android调用堆栈作者:liangshengyang转自:http://www.linuxidc.com/Linux/2011-01/31803.htm在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的handler中,调用l...

weixin_34198453的博客 120

ZYNQ新手必看:你的PS端DDR和QSPI配置真的对了吗?从原理到实操的避雷指南

本文深入解析ZYNQ PS端外设配置的关键要点,特别是DDR匹配和QSPI时钟优化的实战技巧。通过详细案例和配置清单,帮助开发者避免常见错误,确保系统稳定性和启动可靠性。适合ZYNQ新手和需要优化最小系统的开发者参考。

weixin_28675839的博客 445

ONFI5.0命令字实战指南:从基础操作到高级应用

本文深入解析ONFI5.0协议的核心——命令字,提供从基础操作到高级应用的实战指南。详细拆解了NAND闪存的复位、读状态、数据读取(00-30)、页编程(80-10)和块擦除(60-D0)等关键命令周期,并探讨了多平面操作与缓存操作等高级性能优化技巧,帮助开发者高效、稳定地与NAND芯片进行底层交互。

vscode5coder的博客 463

【转载】使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈

使用arm-eabi-addr2line工具跟踪Android调用堆栈 作者:liangshengyang 转自:http://www.linuxidc.com/Linux/2011-01/31803.htm 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的hand...

jxw3042的专栏 233

windows中搭建sonic云真机环境/云真机环境搭建-基于docker容器部署

基于Windows系统搭建Sonic远程云真机环境实现通过浏览器操作手机端系统

雾林小妖的博客 1016

【摘录】使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈

使用arm-eabi-addr2line工具跟踪Android调用堆栈作者:liangshengyang转自:http://www.linuxidc.com/Linux/2011-01/31803.htm在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的handler中,调用l...

weixin_30361753的博客 88

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android 调用堆栈跟踪

使用arm-eabi-addr2line工具跟踪Android调用堆栈 作者:liangshengyang 转自:http://www.linuxidc.com/Linux/2011-01/31803.htm 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的hand

liberize的专栏 1455

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android调用堆栈跟踪

转自:http://www.linuxidc.com/Linux/2011-01/31803.htm 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的handler中,调用libc的backtrace,打出对应的堆栈信息,很快就能找到问题所在。但在Android中,bi

dabang_007的专栏 753

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android crash / debug 堆栈信息

堆栈错误信息: I/DEBUG   (   30): r0 afd4d4a4  r1 ffffffff  r2 7fffffff r3 afd4d4a4 I/DEBUG   (   30): r4 00000000  r5 ffffffff  r6 00000001 r7 be9f6ccc I/DEBUG   (   30): r8 00000000  r9 00000000 

Nio96的专栏 1794

代码分析工具

arm-eabi-addr2line  这个命令可以在打出的地址信息转换成代码的某一行,使用方法: ./arm-eabi-addr2line -f -e libc.so 0000d630 打印出: pthread_mutex_lock_impl /home/android/disk/13005/linux/bionic/libc/bionic/pthread.c:1198 注意,

冉飞的专栏 1771

android或linux调试addr2line工具锁定命令的使用

查看vmlinux内核的起始地址0对应的源码位置 luther@gliethttp:~/kernel$ arm-none-eabi-addr2line -f -e arch/arm/boot/compressed/vmlinux 0 _start /home/luther/kernel/arch/arm/boot/compressed/head.S:107 其实类似于 luther@gl

lqxandroid2012的专栏 3644

arm-eabi-addr2line

arm-eabi-addr2line android应用崩溃的调试方法 分类: Crash 2013-10-17 19:00 2205人阅读 评论(0) 收藏 举报 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export PATH=$PATH:~/dlna/android-

u012547790的专栏 885

跟踪Android callback 调用堆栈

0 在调试 android  系统时可以通过打印调用堆栈 callback stack 来分析和解决android问题。1 java 层打印callback stack 可以通过 catch exception 然后 使用 Log.w(LOGTAG, Log.getStackTraceString(throwable)) 打印调用堆栈Throwable throwable = new Throwa

大海蓝天的专栏 821

arm-eabi-addr2line android应用崩溃的调试方法

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 ~/.bashr

680

android KE or NE分析

使用arm-eabi-addr2line工具跟踪Android调用堆栈 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的handler中,调用libc的backtrace,打出对应的堆栈信息,很快就能找到问题所在。但在Android中,bionic并不提供类似功能,

SongCdut的专栏 5252
上一篇: Android HAL(硬件抽象层)介绍以及调用 .
下一篇: SurfaceView的烦恼-双缓存与清屏
qclzyr
博客等级 码龄16年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值