Android调用堆栈跟踪
来源:互联网 发布:淘宝店铺注册步骤 编辑:程序博客网 时间:2024/05/16 19:12
在通常的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()
于是通过这种方式,即可得到调用堆栈信息,找出问题所在。
Tags:
Android调用堆栈跟踪,Android调用堆栈解析,Android打印调用堆栈,Android Native C调用堆栈
原文:Android中Native代码SIGSEGV调试--调用堆栈解析
出自:http://blog.csdn.net/liangshengyang/archive/2010/09/21/5900083.aspx,作者:liangshengyang
- 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调用堆栈汇总
- 堆栈跟踪:
- 各种寻址和过程进出简介
- unity3d崩溃日志存储位置
- JNA 技术解密
- Android.mk用法
- Android: wakelock
- Android调用堆栈跟踪
- 一个基于maven的 struts2.3.4.1+hibernate4.1.6+spring3.1.2的整合项目
- SQLServer元数据操作
- ArrayList[集合类]、遍历Hsahtable【怎么搞的今天网是有了,怎么老断电呢~!本来好好的心情学习着,破电给人添堵】
- MyISAM和InnoDB你必知必会的几点区别。面试题哦
- Visual Studio 2012 does not support BI
- 第三周 任务1.1 递归求值
- platform设备和驱动注册调用probe的流程
- 最近做的一个oracle数据迁移功能,如有更好的方案,请各位大虾也能告诉小弟。