android用符号表定位问题

有时候我们出现的软重启问题,只有段错误,只给你一个错误地址,没有具体信息,像这种问题我们应该怎么分析呢:


我们先举个例子:

...F DEBUG   : pid: 11028, tid: 11046, name: android.bg  >>> system_server <<<
...E DEBUG   : AM write failed: Broken pipe
03-15 10:53:31.636570  8989  8989 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
03-15 10:53:31.691722  8989  8989 F DEBUG   :     r0 afef2038  r1 00000001  r2 00000001  r3 0000001c
03-15 10:53:31.691869  8989  8989 F DEBUG   :     r4 a24f74a0  r5 00000000  r6 afef2038  r7 abffdcc0
03-15 10:53:31.691947  8989  8989 F DEBUG   :     r8 00000001  r9 adc55600  sl 00000000  fp 12fed3c0
03-15 10:53:31.692033  8989  8989 F DEBUG   :     ip 12fed3dc  sp a24f7478  lr b3ee05a1  pc 00000000  cpsr 600f0010
03-15 10:53:31.695701  8989  8989 F DEBUG   : 
...F DEBUG   : backtrace:
...8989  8989 F DEBUG   :     #00 pc 00000000  <unknown>
...8989  8989 F DEBUG   :     #01 pc 0001359f  /system/lib/libandroid_servers.so
...8989  8989 F DEBUG   :     #02 pc 00c05d1d  /data/dalvik-cache/arm/system@framework@services.jar@classes.dex (offset 0x7cb000)

像这个问题0001359f这个地址出错了,因为它的下个地址为0,说明空指针了,当然导致调用出错了。最后导致system_server重启

像这种问题我们应该怎么解决呢?


我们应该使用addr2line这个工具,将001359f这个地址找到对应的代码,这个时候就需要符号表。

addr2line -e out/target/product/lte26007/symbols/system/lib/libandroid_servers.so -f 0001359f

具体如何使用addr2line可以使用man addr2line来查询


这样我们就有如下结果:

frameworks/base/services/core/jni/com_android_server_location_GpsLocationProvider.cpp:762
就知道了具体出错在哪里了。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值