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  
...8989  8989 F DEBUG   :     #01 pc 0001359f  /system/lib/libandroid_servers.so
...8989  8989 F DEBUG   :     #02 pc 00c05d1d  /data/dalvik-cache/arm/system@[email protected]@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
就知道了具体出错在哪里了。




你可能感兴趣的:(android,&,linux编译相关,&工具)