1加的Android11是什么样子,Android致命信号11(SIGSEGV)为0x636f7d89(代码=1)。怎么能找到它?...

bf9865d2c8feeff3b40f6ab2ebeb0d2a.png

哈士奇WWW

首先,获取您的墓碑堆栈跟踪,它将在每次您的应用程序崩溃时打印出来。就像这样:*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***Build fingerprint: 'XXXXXXXXX'pid: 1658, tid: 13086  >>> system_server 

<<

 r0 00000000  r1 00000001  r2 ad12d1e8  r3 7373654d

 r4 64696f72  r5 00000406  r6 00974130  r7 40d14008

 r8 4b857b88  r9 4685adb4  10 00974130  fp 4b857ed8

 ip 00000000  sp 4b857b50  lr afd11108  pc ad115ebc  cpsr 20000030

 d0  4040000040000000  d1  0000004200000003

 d2  4e72cd924285e370  d3  00e81fe04b1b64d8

 d4  3fbc71c7009b64d8  d5  3fe999999999999a

 d6  4010000000000000  d7  4000000000000000

 d8  4000000000000000  d9  0000000000000000

 d10 0000000000000000  d11 0000000000000000

 d12 0000000000000000  d13 0000000000000000

 d14 0000000000000000  d15 0000000000000000

 scr 80000012

         #00  pc 000108d8  /system/lib/libc.so

         #01  pc 0003724c  /system/lib/libxvi020.so

         #02  pc 0000ce02  /system/lib/libxvi020.so

         #03  pc 0000d672  /system/lib/libxvi020.so

         #04  pc 00010cce  /system/lib/libxvi020.so

         #05  pc 00004432  /system/lib/libwimax_jni.so

         #06  pc 00011e74  /system/lib/libdvm.so

         #07  pc 0004354a  /system/lib/libdvm.so

         #08  pc 00017088  /system/lib/libdvm.so

         #09  pc 0001c210  /system/lib/libdvm.so

         #10  pc 0001b0f8  /system/lib/libdvm.so

         #11  pc 00059c24  /system/lib/libdvm.so

         #12  pc 00059e3c  /system/lib/libdvm.so

         #13  pc 0004e19e  /system/lib/libdvm.so

         #14  pc 00011b94  /system/lib/libc.so

         #15  pc 0001173c  /system/lib/libc.socode around pc:ad115e9c 4620eddc bf00bd70 0001736e 0001734e

          ad115eac 4605b570 447c4c0a f7f44620 e006edc8 

ad115ebc 42ab68e3 68a0d103 f7f42122 6864edd2 ad115ecc d1f52c00 44784803 edbef7f4 bf00bd70 

ad115edc 00017332 00017312 2100b51f 46682210 code around lr:afd110e8 e2166903 1a000018 e5945000 e1a02004 

afd110f8 e2055a02 e1a00005 e3851001 ebffed92 

afd11108 e3500000 13856002 1a000001 ea000009 

afd11118 ebfffe50 e1a01004 e1a00006 ebffed92 

afd11128 e1a01005 e1550000 e1a02006 e3a03000 

stack:

    4b857b10  40e43be8  

    4b857b14  00857280  

    4b857b18  00000000  

    4b857b1c  034e8968  

    4b857b20  ad118ce9  /system/lib/libnativehelper.so    4b857b24  00000002  

    4b857b28  00000406然后,使用addr2line实用程序(在NDK工具链中找到它)来查找崩溃的函数。在这个样本中,你需要addr2line -e -f libc.so 0001173c你就会知道你在哪里出了问题。当然,这不会帮助您,因为它是在libc。因此,您可以将arm-eabi-objdump找到最终目标。相信我,这是一项艰巨的任务。只是想了解最新情况。我想我在整个源代码树上做了很长一段时间的android原生构建,直到今天我才仔细阅读了ndk文档。自从发布ndk-r6以来,它就提供了一个名为ndk-stack.以下是NDK官方文档中的内容和NDK-R9焦油球。概述:ndk-stack是一个简单的工具,允许您在“亚行logcat”的输出中筛选堆栈跟踪,并将共享库中的任何地址替换为相应的:value。简而言之,它将翻译如下:  I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

  I/DEBUG   (   31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'

  I/DEBUG   (   31): pid: 351, tid: 351  %gt;%gt;%gt; /data/local/ndk-tests/crasher <<<

  I/DEBUG   (   31): signal 11 (SIGSEGV), fault addr 0d9f00d8

  I/DEBUG   (   31):  r0 0000af88  r1 0000a008  r2 baadf00d  r3 0d9f00d8

  I/DEBUG   (   31):  r4 00000004  r5 0000a008  r6 0000af88  r7 00013c44

  I/DEBUG   (   31):  r8 00000000  r9 00000000  10 00000000  fp 00000000

  I/DEBUG   (   31):  ip 0000959c  sp be956cc8  lr 00008403  pc 0000841e  cpsr 60000030

  I/DEBUG   (   31):          #00  pc 0000841e  /data/local/ndk-tests/crasher

  I/DEBUG   (   31):          #01  pc 000083fe  /data/local/ndk-tests/crasher

  I/DEBUG   (   31):          #02  pc 000083f6  /data/local/ndk-tests/crasher

  I/DEBUG   (   31):          #03  pc 000191ac  /system/lib/libc.so

  I/DEBUG   (   31):          #04  pc 000083ea  /data/local/ndk-tests/crasher

  I/DEBUG   (   31):          #05  pc 00008458  /data/local/ndk-tests/crasher

  I/DEBUG   (   31):          #06  pc 0000d362  /system/lib/libc.so

  I/DEBUG   (   31):进入更具可读性的输出:  ********** Crash dump: **********

  Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'

  pid: 351, tid: 351  >>> /data/local/ndk-tests/crasher <<<

  signal 11 (SIGSEGV), fault addr 0d9f00d8

  Stack frame #00  pc 0000841e  /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13

  Stack frame #01  pc 000083fe  /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5

  Stack frame #02  pc 000083f6  /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9

  Stack frame #03  pc 000191ac  /system/lib/libc.so

  Stack frame #04  pc 000083ea  /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14

  Stack frame #05  pc 00008458  /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19

  Stack frame #06  pc 0000d362  /system/lib/libc.so用法:为此,您首先需要一个包含应用程序共享库的符号版本的目录。如果使用NDK构建系统(即ndk-build),则它们总是位于$project_path/obj/local/下面,其中表示设备的ABI(即armeabi(默认情况下)。你可以喂logcat文本可作为程序的直接输入,例如:adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi也可以使用-dump选项将logcat指定为输入文件,例如:adb logcat > /tmp/foo.txt

$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt重要:工具查找包含在logcat输出,即类似于: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***复制/粘贴跟踪时,不要忘记跟踪中的这一行,或者ndk-stack不能正常工作。Todo:未来版本ndk-stack将尝试发射adb logcat并自动选择库路径。现在,您必须手动执行这些步骤。从现在开始,ndk-stack不处理没有调试信息的库。尝试检测到给定pc地址的最近的函数入口点(例如,在上面的libc.so示例中)可能是有用的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值