我在大约一个月前发布了一款Android应用程序,它似乎随机崩溃,而且比我特定的方式更频繁。我和我一起工作的开发人员并不确定我们可以从产生的错误中收集到什么,所以希望有人可以为我们解决问题。该应用程序是使用Xamarin Mono Framework构建的。通常它是一个sqlite3_step + XXX错误,在某些情况下它是一个sqlite3_prepare_v2 + XX错误。无论哪种方式,堆栈跟踪通常如下所示。
/system/lib/libsqlite.so,/system/lib/libsqlite.so(sqlite3_step + 510)中的/system/lib/libsqlite.so的本机崩溃
Build fingerprint: 'motorola/XT926_verizon/vanquish:4.4.2/KDA20.62-15/15:user/release-keys'
Revision: 'p300'
pid: 863, tid: 892, name: myapp.android >>> com.myapp.android <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000c
r0 60311d70 r1 00000000 r2 00002210 r3 00000000
r4 60311c20 r5 00000000 r6 ffffffec r7 00000000
r8 00001000 r9 00000000 sl 00002400 fp 00000000
ip 00000000 sp 612ff208 lr 409ee113 pc 40978564 cpsr 60030030
d0 61642f617461642f d1 642e6d6f632f6174
d2 72657372756f6367 d3 6e612e7765697665
d4 31222c223631222c d5 5d223831222c2237
d6 3a2273726170222c d7 332c332c332c335b
d8 4194997000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 69662f64696f7264 d17 726367642f73656c
d18 0000000000000001 d19 0001000400000000
d20 0061006e006e0075 d21 00490065006c0062
d22 0065006c0070006d d23 0074006e0065006d
d24 3fd1b10853a79915 d25 3fd554fa9ca0567a
d26 3fdb6db71408e660 d27 3fe33333332d4313
d28 3ff0000000000000 d29 0000000000000001
d30 fff0000000000000 d31 ffffffff00000000
scr 60000011
backtrace:
#00 pc 0003f564 /system/lib/libsqlite.so
#01 pc 0000bcfd /system/lib/libsqlite.so
#02 pc 0000c1df /system/lib/libsqlite.so
#03 pc 000acf41 /system/lib/libsqlite.so
#04 pc 000ac5a9 /system/lib/libsqlite.so
#05 pc 0000d62f /system/lib/libsqlite.so (sqlite3_step+510)
#06 pc 0002112c <unknown>
code around pc:
40978544 b1487a20 6f80f418 6c20d106 68027ae1
40978554 47906952 d13b2800 e9d46c20 68012314
40978564 a90268cf 000ce88d 47b8220c f418bb80
40978574 d1096f80 7ae16c20 29036802 bf086952
40978584 0110f041 bb184790 0112e9d4 0f00f1b9
40978594 0114e9c4 f04fbf18 b14d0901 0f00f1b9
409785a4 2000d106 462062e0 f914f000 d10f2800
409785b4 00b0f8d4 e0046801 f0228b0a 830a0204
409785c4 29006a09 6841d1f8 20046081 200073e0
409785d4 4479490b 68095871 42919a07 b008bf04
409785e4 87f0e8bd e8caf7c5 00085a96 ffffffec
409785f4 000859ac ffffafd8 0008599a ffffaff0
40978604 000858ea 4ff0e92d 4680b087 f8d8460c
40978614 6810203c f8d8b998 23000000 1078f8d8
40978624 93006987 7361f647 0308f2c0 f0414019
40978634 2100031e 460747b8 f0402f00 f8d880c2
code around lr:
409ee0f0 2d0e4605 bb6dd02d 25009803 db292800
409ee100 ec0af74f 9803491d 44314479 1180f8d1
409ee110 25004788 2500b1f0 bf182c00 f74f6a25
409ee120 4917eb54 4a102d00 68034479 0001eb02
409ee130 f8df4e14 eb06c03c bf080201 44614605
409ee140 0024e88d 7212f646 f2419002 f753000a
409ee150 2500f907 f0208a60 82600008 b0044628
409ee160 bf00bd70 0000fe1a ffff5ae1 ffffa6dc
409ee170 ffffa615 0000fdde 0000014c 0000fdb8
409ee180 0000fd98 ffffa60f 4830e92d 460cb09e
409ee190 4a1e491d 44794605 441168e8 21b0f8d1
409ee1a0 4790a904 f74fb308 6800eb10 6a2c6168
409ee1b0 eb0af74f 2c004916 44794a16 eb026803
409ee1c0 4d150001 c054f8df 0201eb05 4604bf08
409ee1d0 e88d4461 f6460014 9002724e 700af240
409ee1e0 740af240 f8bcf753 9810e00a f0809911
答案 0 :(得分:0)
我建议使用adb logcat来获取日志并以这种方式寻找线索。它仍然有点棘手,但至少有可用的信息。
注意:如果您能够可靠地重现崩溃,那么首先清除旧的ADB日志是个好主意,所以你没有趟过一堆额外的信息。然后简单地再现崩溃&amp;立即抓住日志。
命令:adb logcat -c
(资料来源:https://stackoverflow.com/a/3315407/3757150)
C:\android-sdk-windows\platform-tools
)adb connect
https://kb.xamarin.com/customer/portal/articles/1675684#adb-logcat
通常,对于崩溃;您将看到堆栈跟踪和类似于以下内容的消息:
=============================================== ==================
执行本机代码时获得SIGSEGV。这通常表示
单声道运行时或其中一个本机库中的致命错误 您的应用程序使用。
================================================== ===============
不幸的是,此消息本身相当泛型;但它至少告诉你崩溃发生在日志中的哪个位置。一旦你用它来查看球场,就可以看到导致它的堆栈跟踪。
查找崩溃发生前最后一次启动的活动/意图也很有帮助:http://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/android_debug_log/#Interesting_Messages