转自: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调用堆栈跟踪相关推荐

  1. WinDbg调试dmp(查找问题的异常堆栈时出现的 UnhandledExceptionFilter 调用堆栈跟踪中和其他技巧)

    1.使用windbg打开dump文件,同时设置symbols. 如果之前下载过windows的symbols就直接设置symbols path: (windows和程序的pdb) 例如:C:\Symb ...

  2. android 获取堆栈地址,关于java native interface:如何捕获SIGSEGV(分段错误)并在Android下的JNI下获取堆栈跟踪?...

    我正在将一个项目转移到新的Android本机开发工具包(即JNI)中,我想捕获sigsegv,如果它发生(也可能是sigill.sigabrt.sigfpe),以便呈现一个很好的崩溃报告对话框,而不是 ...

  3. java android 堆栈_如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?...

    ITMISS 从Jelly Bean开始,您无法获取堆栈跟踪,因为READ_LOGS走了.:-(实际上,我的信号处理程序在工作时没有做任何多余的事情,并且已经发布了使用它的代码,您可以在github上 ...

  4. Android调用JNI本地方法跟踪目标代码

    正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用  ...

  5. Unity 之 安卓堆栈跟踪和日志工具 (Android Logcat | 符号表解析Bugly捕获)

    Unity 之 日志解析工具 Android Logcat 一,工具集成 1.1 注意事项 1.2 导入插件 二,连接设备 2.1 使用USB连接 2.2 无线连接 三,实用功能介绍 3.1 通用介绍 ...

  6. 如何将堆栈跟踪转换为字符串?

    将Throwable.getStackTrace()的结果转换为描述堆栈跟踪的字符串的最简单方法是什么? #1楼 如果您是针对Android开发的,则更简单的方法是使用此方法: import andr ...

  7. javascript 堆栈_JavaScript调用堆栈-它是什么以及为什么它是必需的

    javascript 堆栈 The JavaScript engine (which is found in a hosting environment like the browser), is a ...

  8. 最大调用堆栈大小超出错误

    我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误 它说 超出最大呼叫堆栈大小. 该错误的确切含义是什么,它会完全 ...

  9. gdb调试之堆栈跟踪

    在使用gdb调试时,经常要用到查看堆栈信息,特别是在内核调试时,这 显得尤其重要.通过gdb的堆栈跟踪,可以看到所有已调用的函数列表,以及 每个函数在栈中的信息. ------------------ ...

最新文章

  1. 神经网络学习中的SoftMax与交叉熵
  2. HLS协议及java切片相关
  3. mysql 5.6升级8.0_Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法...
  4. text determination debug screenshot
  5. java流写入数据库_成为Java流大师–第4部分:数据库流
  6. 最近邻插值、双线性插值、双三次插值
  7. linux libasan.so,Address Sanitizer 用法
  8. 熵权法 —— python
  9. android eclipse不能创建activity,在eclipse里面开发android应用,不能新建Activity
  10. 亮点抢先看,华为云 TechWave 大数据专题日有啥料?
  11. 汇编语言典型例子详解_汇编语言例子_汇编语言 举例子
  12. [转]唐骏谈职场 —— 管理者要学会让员工感动
  13. 解压软件Bandizip Archiver for mac
  14. 修复 Windows 10 设置界面里面混乱的语言翻译
  15. 《深入学习VMware vSphere 6》——2.2 vSphere 6实验环境需求
  16. 2019033期3d计算机开机号,3D历史120期开奖
  17. java里面case是什么意思_什么是Java中的switch case语句以及如何使用它?
  18. 加拿大留学计算机专业好移民吗,加拿大最适合留学转移民的热门专业——计算机科学及信息技术...
  19. 讲道理 | 计算正交投影算子
  20. 电化学: 电解池,原电池

热门文章

  1. Ubuntu18.04安装Teamviewer-Host最简单的方法
  2. MFC实现CTRL C、CTRL V等功能
  3. 适配到Android 12,全版本支持保存图片到相册方案
  4. LaTeX技巧218:LaTeX如何正确输入引号:双引号“”单引号‘’
  5. MATLAB用矩阵创建大型矩阵以及创建RGB图像
  6. 知道了域名怎么查备案号
  7. 电脑无格式复制粘贴文本
  8. 眼在手外情况的二维视觉自动标定(二)
  9. 如何清除服务器的缓存文件,服务器清理内存怎么清理缓存
  10. 从流水线工人到谷歌上班的程序媛。。。