Android调用堆栈跟踪
转自:http://www.linuxidc.com/Linux/2011-01/31803.htm
在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理。只要在程序中设置SIGSEGV的handler中,调用libc的backtrace,打出对应的堆栈信息,很快就能找到问题所在。但在Android中,bionic并不提供类似功能,而且log信息是走的logger,通过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
二进制代码置于手机中,处于size的考虑,剔除了符合信息。但我们可以使用编译时生成的二进制文件,获取其符号信息,从而得到调用堆栈:
yang@Ubuntu$ src/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-addr2line -f -e src/out/target/product/pnx6715_refd/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()
于是通过这种方式,即可得到调用堆栈信息,找出问题所在。
Android调用堆栈跟踪相关推荐
- WinDbg调试dmp(查找问题的异常堆栈时出现的 UnhandledExceptionFilter 调用堆栈跟踪中和其他技巧)
1.使用windbg打开dump文件,同时设置symbols. 如果之前下载过windows的symbols就直接设置symbols path: (windows和程序的pdb) 例如:C:\Symb ...
- android 获取堆栈地址,关于java native interface:如何捕获SIGSEGV(分段错误)并在Android下的JNI下获取堆栈跟踪?...
我正在将一个项目转移到新的Android本机开发工具包(即JNI)中,我想捕获sigsegv,如果它发生(也可能是sigill.sigabrt.sigfpe),以便呈现一个很好的崩溃报告对话框,而不是 ...
- java android 堆栈_如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?...
ITMISS 从Jelly Bean开始,您无法获取堆栈跟踪,因为READ_LOGS走了.:-(实际上,我的信号处理程序在工作时没有做任何多余的事情,并且已经发布了使用它的代码,您可以在github上 ...
- Android调用JNI本地方法跟踪目标代码
正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用 ...
- Unity 之 安卓堆栈跟踪和日志工具 (Android Logcat | 符号表解析Bugly捕获)
Unity 之 日志解析工具 Android Logcat 一,工具集成 1.1 注意事项 1.2 导入插件 二,连接设备 2.1 使用USB连接 2.2 无线连接 三,实用功能介绍 3.1 通用介绍 ...
- 如何将堆栈跟踪转换为字符串?
将Throwable.getStackTrace()的结果转换为描述堆栈跟踪的字符串的最简单方法是什么? #1楼 如果您是针对Android开发的,则更简单的方法是使用此方法: import andr ...
- javascript 堆栈_JavaScript调用堆栈-它是什么以及为什么它是必需的
javascript 堆栈 The JavaScript engine (which is found in a hosting environment like the browser), is a ...
- 最大调用堆栈大小超出错误
我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误 它说 超出最大呼叫堆栈大小. 该错误的确切含义是什么,它会完全 ...
- gdb调试之堆栈跟踪
在使用gdb调试时,经常要用到查看堆栈信息,特别是在内核调试时,这 显得尤其重要.通过gdb的堆栈跟踪,可以看到所有已调用的函数列表,以及 每个函数在栈中的信息. ------------------ ...
最新文章
- 神经网络学习中的SoftMax与交叉熵
- HLS协议及java切片相关
- mysql 5.6升级8.0_Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法...
- text determination debug screenshot
- java流写入数据库_成为Java流大师–第4部分:数据库流
- 最近邻插值、双线性插值、双三次插值
- linux libasan.so,Address Sanitizer 用法
- 熵权法 —— python
- android eclipse不能创建activity,在eclipse里面开发android应用,不能新建Activity
- 亮点抢先看,华为云 TechWave 大数据专题日有啥料?
- 汇编语言典型例子详解_汇编语言例子_汇编语言 举例子
- [转]唐骏谈职场 —— 管理者要学会让员工感动
- 解压软件Bandizip Archiver for mac
- 修复 Windows 10 设置界面里面混乱的语言翻译
- 《深入学习VMware vSphere 6》——2.2 vSphere 6实验环境需求
- 2019033期3d计算机开机号,3D历史120期开奖
- java里面case是什么意思_什么是Java中的switch case语句以及如何使用它?
- 加拿大留学计算机专业好移民吗,加拿大最适合留学转移民的热门专业——计算机科学及信息技术...
- 讲道理 | 计算正交投影算子
- 电化学: 电解池,原电池