跟踪Android调用堆栈

调试so中的内存错误::

通常编译Android代码时,出于size的考虑,剔除了符号信息。但我们可以使用编译时生成的二进制文件(转注:含有符号信息的文件,通常位于./out/target/product/[PROJECT]/symbols/system/lib/目录),获取其符号信息,从而得到调用堆栈:

prebuilts\gcc\linux-x86\arm\arm-linux-androideabi-4.7\bin\arm-linux-androideabi-addr2line  -f -e ./out/target/product/[PROJECT]/symbols/system/lib/libxxx.so   xxxx (出错地址)

通过这种方式,即可得到调用堆栈信息,找出问题具体所在。



WAY2,跟前面的方法类似,只是更加智能,不用你亲自去找问题点,脚本会帮你!

google提供一个python脚本

可以从 http://code.google.com/p/android-ndk-stacktrace-analyzer/ 下载这个python脚本,

 adb logcat -d > logfile 导出 crash 的log
使用 arm-eabi-objdump (位于prebuilts\gcc\linux-x86\arm\arm-linux-androideabi-4.7\bin下面)把so或exe转换成汇编代码,如:
arm-eabi-objdump -S mylib.so > mylib.asm, 此时生成的asm 库文件是在你的工具目录下的,别找错地方了!!!
然后使用脚本
python parse_stack.py <asm-file> <logcat-file>

然后命令框就会显示程序崩溃点的函数调用~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值