转自: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. java.nio.Buffer flip()方法
  2. Effective Java之用enum代替int常量(三十)
  3. 字符串以及内存操作相关函数
  4. 产品报价单模板_一文说透报价单,这么做才是专业!附模板及注意事项
  5. (转)jquery图片左右滚动
  6. ubuntu 的使用(五)—— 桌面(desktop)
  7. 函数参数缺少const导致so无法加载
  8. 论文实录 | 毕业设计如何做需求分析?
  9. linux的常用的安装命令
  10. 郝斌c语言课程笔记,郝斌C语言详细笔记(附源码) - 图文
  11. 计算机网络-什么是计算机网络?
  12. C语言图书用国际标准书号,图书登记管理系统程序ds.doc
  13. jsp——四大作用域详解
  14. 夺命雷公狗---微信开发61----在线点播电影网2之电影网之个人中心
  15. cordova build时出错Minimum supported Gradle version is 5.4.1. Current version is 4.10.3
  16. Brother打印机无线连接电脑端脱机状态解决方法
  17. 初等数论【整除性篇】之习题证明
  18. 如何将STP文件转换为CAD文件
  19. LDPC译码器的FPGA实现
  20. 【LaTeX】制作 PPT(更新中)

热门文章

  1. 深度学习中的batch的大小对学习效果有何影响?
  2. c++ string头文件
  3. [新概念三]Lesson 5 - The facts
  4. would you like to 和would you like
  5. Python表白代码合集:5种表白代码,找不到对象你来找我,这也太秀了叭
  6. 敏捷个人:个人敏捷结果系统.ppt
  7. 一些JavaScript特性
  8. 2019华为-CodeCraft经历
  9. XIM协议的原理及其实现
  10. 油田采油生产业务建模之业务用例规约实践(EA使用入门)