android 上调试动态库方法


关于android 上 gdb调试进程的方法请参考前一篇文章。


如果 android应用程序 包含动态库调用,程序异常退出后 给出一堆地址,

I/DEBUG   (  841): signal 11 (SIGSEGV), fault addr deadbaad
I/DEBUG   (  841):  r0 00000000  r1 afd1498d  r2 00000027  r3 00000070
I/DEBUG   (  841):  r4 afd42328  r5 00000000  r6 00000000  r7 4e6fae30
I/DEBUG   (  841):  r8 00100000  r9 a811c2f9  10 4e5fb000  fp 0013cdb8
I/DEBUG   (  841):  ip 0000173c  sp 4e6fa9d8  lr deadbaad  pc afd11f40  cpsr 60000030
I/DEBUG   (  841):  d0  400000003eaaaaab  d1  3ff0000041f00000
I/DEBUG   (  841):  d2  0000000050baf6de  d3  0000000000000000
I/DEBUG   (  841):  d4  00000007000000b4  d5  3fe999999999999a
I/DEBUG   (  841):  d6  3fe000000000000binder: release proc 1047, transaction 109259, not freed
0  d7  3eaaaaab3f800000
I/DEBUG   (  841):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   (  841):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   (  841):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (  841):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (  841):  scr 80000012


根据 pc 地址 及crash的 动态库可以推断出现问题的 代码位置,

利用 gcc 的 命令 arm-eabi-addr2line ,从地址到代码位置的定位:

具体例子:比如我的 动态库为 hello.so,把此库放在本地 带 symbols 的android lib目录下,执行

 arm-eabi-addr2line -C -f -e /path/to/lib/with_sysbols/hello.so afd11f40

上面的afd11f40 为 crash时的pc 地址:

(I/DEBUG   (  841):  ip 0000173c  sp 4e6fa9d8  lr deadbaad  pc afd11f40  cpsr 60000030

注意点:

1. 最好把你的动态苦编译成调试版本(-g)

2. 要把你的动态苦放在android 动态库的 sysbols版本目录下,比如我的机器上目录为:(Eg.) /home/usera/android/out/target/product/generic/symbols/system/lib




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值