Tombstone调试

    android调试中,不可避免的会遇到tombstone日志。借用某位仁兄的话"tombstone一般是由Dalvik错误、状态监视调试器、C层代码以及libc的一些问题导致的。当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收到之后,进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,开发者需要通过调用栈来分析整个调用流程来找出出问题的点。"

    在ndk包中,为我们提供了供windows环境下使用的工具列表。这些列表都以arm-linux-androideabi-开头。并且接上linux常用bin的名字,例如arm-linux-androideabi-dumpobj和arm-linux-androideabi-nm。

    调试tombstone的时候一般会用到arm-linux-androideabi-addr2line.exe、arm-linux-androideabi-nm.exe、arm-linux-androideabi-objdump.exe。

$ arm-eabi-addr2line.exe --help
Usage: arm-eabi-addr2line [option(s)] [addr(s)]
Convert addresses into line number/file name pairs.
If no addresses are specified on the command line, they will be read from stdin
The options are:
@<file> Read options from <file>
-b --target=<bfdname> Set the binary file format
-e --exe=<executable> Set the input file name (default is a.out)
-i --inlines Unwind inlined functions
-j --section=<name> Read section-relative offsets instead of addresses
-s --basenames Strip directory names
-f --functions Show function names
-C --demangle[=style] Demangle function names
-h --help Display this information
-v --version Display the program's version

arm-linux-androideabi-addr2line.exe最为常用,它负责把相对地址转换成符号,让我们知道错误的地方是在哪个函数里。好让我们有的放矢。

使用方法为 arm-linux-androideabi-addr2line -C -e -f xxx.so 0xxxxxxxxx


到目前为止,只定位到了出错的函数,我们还需要arm-linux-androideabi-objdump来反汇编so文件,找到出错的汇编指令。还原出错现场。

使用方法为 arm-linux-androideabi-objdump -S -D xxx.so > xxx.txt


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值