2012-10-30 66 views
12

我一直在越来越多的报告,我的android应用程序崩溃,崩溃发生在本机代码,因此没有生成堆栈跟踪。我只有一个本地函数,这不是问题,因为它在启动过程中被调用一次,问题在2-3分钟后发生。如何找出Android中SIGSEGV的原因

我从logcat中,下面的部分转储:

I/DEBUG (8704): pid: 9028, tid: 9136 >>> xxxx <<< 
I/DEBUG (8704): at : (2012-10-30 21:10:42.000086303 UTC) 0 
I/DEBUG (8704): signal 11 (SIGSEGV), fault addr deadbaad 
I/DEBUG (8704): r0 00000000 r1 afd14691 r2 00000027 r3 00000070 
I/DEBUG (8704): r4 afd42328 r5 00000000 r6 00000000 r7 0000a000 
I/DEBUG (8704): r8 00000000 r9 4a77b900 10 4a77b8d8 fp 00000046 
I/DEBUG (8704): ip 00001750 sp 4a77b590 lr deadbaad pc afd11ce4 cpsr 60000030 
I/DEBUG (8704): d0 643a64696f72646e d1 6472656767756265 
I/DEBUG (8704): d2 0000005d0000005b d3 0006000600060006 
I/DEBUG (8704): d4 0120009c009c009c d5 000a000a000a000a 
I/DEBUG (8704): d6 0012000600060006 d7 0000000000000000 
I/DEBUG (8704): d8 0000004600000000 d9 43f0000000000000 
I/DEBUG (8704): d10 4040000043080000 d11 0000000043ee464c 
I/DEBUG (8704): d12 0000000000000000 d13 0000000000000000 
I/DEBUG (8704): d14 0000000000000000 d15 0000000000000000 
I/DEBUG (8704): d16 0505050507070707 d17 0b0b0b0b10101010 
I/DEBUG (8704): d18 0707070703030303 d19 0000000000000000 
I/DEBUG (8704): d20 0100010001000100 d21 0100010001000100 
I/DEBUG (8704): d22 0000000000000000 d23 0000000000000000 
I/DEBUG (8704): d24 0000000000000000 d25 0000000000000000 
I/DEBUG (8704): d26 00f900f900f900f9 d27 00fb00fb00fb00fb 
I/DEBUG (8704): d28 00f000f000f000f0 d29 00f500f500f500f5 
I/DEBUG (8704): d30 01748000016e0000 d31 01818000017b0000 
I/DEBUG (8704): scr 20000012 
I/DEBUG (8704): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG (8704): Build fingerprint: \'lge/lge_bprj/lgp970/lgp970:2.2.2/FRG83G/V10a_07-JUN-2011.422D181D:user/release-keys\' 
I/DEBUG (8704):   #00 pc 00011ce4 /system/lib/libc.so 
I/DEBUG (8704):   #01 pc 0000be32 /system/lib/libc.so 
I/DEBUG (8704):   #02 pc 0000cd92 /system/lib/libc.so 
I/DEBUG (8704):   #03 pc 000008d8 /system/lib/libstdc++.so 
I/DEBUG (8704):   #04 pc 0004efa4 /system/lib/libskia.so 
I/DEBUG (8704):   #05 pc 0006d00c /system/lib/libskia.so 
I/DEBUG (8704):   #06 pc 0006f414 /system/lib/libskia.so 
I/DEBUG (8704): 
I/DEBUG (8704): code around pc: 
I/DEBUG (8704): afd11cc4 2d00682d e029d1fb b12b68db c05cf8df 
I/DEBUG (8704): afd11cd4 f8442001 4798000c e054f8df 26002227 
I/DEBUG (8704): afd11ce4 2000f88e eecaf7fb f7fc2106 f04feff8 
I/DEBUG (8704): afd11cf4 91035180 460aa901 96012006 f7fc9602 
I/DEBUG (8704): afd11d04 a905eb6e 20024632 eb78f7fc eeb6f7fb 
I/DEBUG (8704): 
I/DEBUG (8704): code around lr: 
I/DEBUG (8704): deadba8c ffffffff ffffffff ffffffff ffffffff 
I/DEBUG (8704): deadba9c ffffffff ffffffff ffffffff ffffffff 
I/DEBUG (8704): deadbaac ffffffff ffffffff ffffffff ffffffff 
I/DEBUG (8704): deadbabc ffffffff ffffffff ffffffff ffffffff 
I/DEBUG (8704): deadbacc ffffffff ffffffff ffffffff ffffffff 
I/DEBUG (8704): 
I/DEBUG (8704): stack: 
I/DEBUG (8704):  4a77b550 00000015 
I/DEBUG (8704):  4a77b554 afd146c1 /system/lib/libc.so 
I/DEBUG (8704):  4a77b558 afd425a0 /system/lib/libc.so 
I/DEBUG (8704):  4a77b55c afd4254c /system/lib/libc.so 
I/DEBUG (8704):  4a77b560 00000000 
I/DEBUG (8704):  4a77b564 afd156db /system/lib/libc.so 
I/DEBUG (8704):  4a77b568 afd14691 /system/lib/libc.so 
I/DEBUG (8704):  4a77b56c afd14691 /system/lib/libc.so 
I/DEBUG (8704):  4a77b570 00000070 
I/DEBUG (8704):  4a77b574 afd42328 /system/lib/libc.so 
I/DEBUG (8704):  4a77b578 00000000 
I/DEBUG (8704):  4a77b57c 4a77b5a4 
I/DEBUG (8704):  4a77b580 0000a000 [heap] 
I/DEBUG (8704):  4a77b584 afd14933 /system/lib/libc.so 
I/DEBUG (8704):  4a77b588 df002777 
I/DEBUG (8704):  4a77b58c e3a070ad 
I/DEBUG (8704): #00 4a77b590 afd43904 /system/lib/libc.so 
I/DEBUG (8704):  4a77b594 afd103ec /system/lib/libc.so 
I/DEBUG (8704):  4a77b598 afd42328 /system/lib/libc.so 
I/DEBUG (8704):  4a77b59c 49687628 
I/DEBUG (8704):  4a77b5a0 49687628 
I/DEBUG (8704):  4a77b5a4 fffffbdf 
I/DEBUG (8704):  4a77b5a8 afd42328 /system/lib/libc.so 
I/DEBUG (8704):  4a77b5ac afd4374c /system/lib/libc.so 
I/DEBUG (8704):  4a77b5b0 49687628 
I/DEBUG (8704):  4a77b5b4 afd0be37 /system/lib/libc.so 
I/DEBUG (8704): #01 4a77b5b8 49687660 
I/DEBUG (8704):  4a77b5bc 00430a60 [heap] 
I/DEBUG (8704):  4a77b5c0 00001424 
I/DEBUG (8704):  4a77b5c4 4a77b8b0 
I/DEBUG (8704):  4a77b5c8 00000000 
I/DEBUG (8704):  4a77b5cc 49687628 
I/DEBUG (8704):  4a77b5d0 49687628 
I/DEBUG (8704):  4a77b5d4 00000000 
I/DEBUG (8704):  4a77b5d8 4a77b8b0 
I/DEBUG (8704):  4a77b5dc afd0cd95 /system/lib/libc.so 

我的问题:

我知道我可以在其中找到了SIGSEGV从出现这种情况的本地函数,但我不知道在哪里得到原生库来找到它。它发生在用户的电话上,我没有直接访问它或用户...有没有这些库的网站,或者我可以建立它们,而他们留下来与电话上的一样?还是有更好的方法来调试这些?阅读

谢谢,任何想法是值得欢迎的:-)

更新:

至于建议,使用ndk-stack像这样:

./ndk-stack -sym LONGPATH/armeabi -dump foo.txt 

其中foo.txt的包含 “构建指纹”东西,从一个有很多明星(它搜索)的线开始,但我得到的是:

********** Crash dump: ********** 
Build fingerprint: \'lge/lge_bprj/lgp970/lgp970:2.2.2/FRG83G/V10a_07-JUN-2011.422D181D:user/release-keys\' 

和程序停止..

EDIT2:

使用arm-linux-androideabi-addr2line和下载FRG83G ROM我远一点:

它指向报警,dlmalloc_trim和libc.so realloc,删除在ligstdC++,所以并SI8_D16_filter_DXDYdrawBitmapclipQuad在libskia.so

现在到了有趣的部分,如何处理这些信息。我会继续明天,这是0530这里..

EDIT3:

我又进了一步,但再次卡住了,在倾倒点在libskia.so功能的PC值,我发现,使用多线程喷漆的对象,同时可引起这个问题,我不这样做,但我没有这样做,但我重新使用BitmapFactory.Options,希望那是问题,我删除了那部分,仍然崩溃...转储指向,SkTriColorShader::shadeSpanSkDraw::drawBitmap。最后一个是指向位图问题最明显的..但它不是BitmapFactory.Options或绘制对象..

回答

8

为了找到信号11的原因,您必须使用ndk-stack工具。如需任何帮助,请使用以下链接作为参考

http://yssays.wordpress.com/2011/12/27/android-ndk-stack-tool/

+5

不错!正是我需要的,唯一的问题是“<你的共享库的路径>”,我没有访问电话,这些库对于每个android版本都是一样的吗?所以如果问题发生在android 2.2上,我可以带任何android 2.2手机并从中获取共享库吗? – Danny

6

“我只有一​​个原生功能,因为它启动时调用一次,在问题发生2-3分钟后,这是没有问题的。”

Bzzzztt!错误。完全有可能在一个地方垃圾内存....然后在尝试访问程序完全不同部分中的(现在损坏的)内存时失败。

我假设你使用NDK。

建议:

1)把周围的任何全局内存或者malloc分配的缓冲区 “前哨” 的价值观。

2)认真仔细检查所有“的malloc()的”(‘deadbaad’听起来很像一个已经从堆中分配的东西)

3)看看这里使用NDK-gdb的提示:

PS:

是您的本机代码C或C++?

+0

好吧,我仍然不认为这是原因,因为代码一年左右没有触及,最近才开始崩溃,但我会完全删除我的本机代码,看看它是否已解决,谢谢纠正我错误的想法! – Danny

相关问题