保护应用程序免受本机代码崩溃

时间:2011-08-17 19:16:00

标签: android native-code

我的Android应用程序正在使用偶尔崩溃的本机库。它是由来自不同国家/地区的供应商提供的第三方库,因此至少可以在根目录上修复问题非常耗时。

有没有办法优雅地捕获本机代码中的异常,以防止整个应用程序关闭?

这是一个示例堆栈跟踪,而不是它真正有用。

感谢。

I/DEBUG   (  100): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (  100): Build fingerprint: 'SEMC/LT15a_1247-3693/LT15a:2.3.2/3.0.A.2.181/SvfP:user/release-keys'
I/DEBUG   (  100): pid: 1427, tid: 1525  >>> com.foo.abc <<<
I/DEBUG   (  100): signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 00708f98
I/DEBUG   (  100):  r0 00a179b0  r1 00010014  r2 0000000b  r3 00000194
I/DEBUG   (  100):  r4 40e39e50  r5 40c2c090  r6 006f64c0  r7 0000c000
I/DEBUG   (  100):  r8 40c2c090  r9 006f64c0  10 0000c000  fp 00000001
I/DEBUG   (  100):  ip 00708f68  sp 304e7ab0  lr 40c1d6f9  pc 00708f98  cpsr 08000010
I/DEBUG   (  100):  d0  6472656767756265  d1  0d6c6d74682f7478
I/DEBUG   (  100):  d2  51544d7941444e3d  d3  59544e3351444f32
I/DEBUG   (  100):  d4  556b4e445a6a4f77  d5  566a4e3345554e34
I/DEBUG   (  100):  d6  5a454f466c7a4e46  d7  565552774d545142
I/DEBUG   (  100):  d8  fff0000000000000  d9  3ff0000000000000
I/DEBUG   (  100):  d10 3fc0000043f00000  d11 407e000000000000
I/DEBUG   (  100):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (  100):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (  100):  d16 000000002c666970  d17 4040000000000000
I/DEBUG   (  100):  d18 547d42aea2879f2e  d19 412e848000000000
I/DEBUG   (  100):  d20 4059000000000000  d21 8000000000000000
I/DEBUG   (  100):  d22 0000000000000000  d23 0000000000000000
I/DEBUG   (  100):  d24 0000000000000000  d25 3ff8000000000000
I/DEBUG   (  100):  d26 0000000000000000  d27 3ff8000000000000
I/DEBUG   (  100):  d28 088a000008820000  d29 3ff8000000000000
I/DEBUG   (  100):  d30 0000000000000000  d31 3fe5555555555555
I/DEBUG   (  100):  scr 60000012
I/DEBUG   (  100):
I/DEBUG   (  100):          #00  pc 00708f98  [heap]
I/DEBUG   (  100):          #01  pc 0001d6f6  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #02  pc 00026722  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #03  pc 00074170  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #04  pc 00106b58  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #05  pc 0011fdd4  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #06  pc 001308cc  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #07  pc 0002c0b8  /data/data/com.foo.abc/lib/lib3rdpartylib.so
I/DEBUG   (  100):          #08  pc 000118f4  /system/lib/libc.so
I/DEBUG   (  100):          #09  pc 000114c0  /system/lib/libc.so
I/DEBUG   (  100):
I/DEBUG   (  100): code around pc:
I/DEBUG   (  100): 00708f78 00000000 00000000 00a57b5c 00a57b78
I/DEBUG   (  100): 00708f88 00000020 0000004a 2f316d2f 42422f4d
I/DEBUG   (  100): 00708f98 4d2d5f56 4d5f6461 535f6e65 455f3130
I/DEBUG   (  100): 00708fa8 2d5f3130 6c70614d 4d2d5f65 32474550
I/DEBUG   (  100): 00708fb8 5f44535f 5f4d5244 4b303036 2d30302f
I/DEBUG   (  100):
I/DEBUG   (  100): code around lr:
I/DEBUG   (  100): 40c1d6d8 91029003 93009201 93049b03 681b9b04
I/DEBUG   (  100): 40c1d6e8 681a3308 98044694 9a019902 47e09b00
I/DEBUG   (  100): 40c1d6f8 bd00b007 b089b500 91029003 93009201
I/DEBUG   (  100): 40c1d708 93062300 93059b03 681b9b05 681a330c
I/DEBUG   (  100): 40c1d718 98054694 9a019902 47e09b00 93061c03
I/DEBUG   (  100):
I/DEBUG   (  100): stack:
I/DEBUG   (  100):     304e7a70  00010014  [heap]
I/DEBUG   (  100):     304e7a74  0000000b
I/DEBUG   (  100):     304e7a78  00000194

1 个答案:

答案 0 :(得分:3)

编写一个java信号处理程序 - 比如here - 来捕获SIGILL / -4(这就是你的库正在抛出的东西)。

让信号处理程序抛出一个异常,这会美化一些东西。