Android调用堆栈跟踪
来源:互联网 发布:方正飞腾排版软件 编辑:程序博客网 时间:2024/04/28 20:22
转自: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调用堆栈跟踪
- Android 调用堆栈跟踪
- 跟踪Android调用堆栈
- Android 调用堆栈跟踪
- Android调用堆栈跟踪
- 跟踪Android callback 调用堆栈
- 跟踪Android callback 调用堆栈
- Android 调用堆栈跟踪(二)
- 使用arm-eabi-addr2line工具跟踪Android调用堆栈
- pstack跟踪程序调用堆栈
- android c++ 代码堆栈跟踪
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- Android 方法调用跟踪
- android打印调用堆栈
- android调用堆栈汇总
- 堆栈跟踪:
- react native学习笔记
- android,前端上传图片到服务器常见问题及解决方案
- hdu 3183 A Magic Lamp rmq 贪心
- [leetcode] 312. Burst Balloons 解题报告
- 进程守护
- Android调用堆栈跟踪
- 委托(委托变量、多路委托变量)
- MYSQL必知必会读书笔记 第二十八章 用户授权
- Android开发同学请注意啦,Android Studio2.1.1版本发布更新, 解决重大安全问题.
- HBase 1.1.3 balance相关源码分析 一
- JavaWeb学习总结(一)_基础概念
- Posix标准IPC笔记-1
- CSS学习之列表 - CSS: The Missing Manual
- java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql