如何获取Android  ANR  log和 userspace stability issues?
1、如何调试Android not responding crashes (ANR)

需要各种logs:
main - Main logused by Android applications (android.util.Log class)
events - Systemevents (things like garbage collection, activity manager state, useandroid.util.EventLog class)
radio - Radioand phone-related information (no class used; Messages tagged for radio getrouted here)
system – Used byAndroid framework for low-level system messages to separate from noisy mainapps log (use android.util.Slog class)

搜集logs以便分析:
adb logcat -vthreadtime -b main | tee logcat_main.log
adb logcat -vthreadtime -b radio | tee logcat_radio.log
adb logcat -vthreadtime -b events | tee logcat_events.log
adb logcat -vthreadtime -b system | tee logcat_system.log
adb bugreport> bugreport.txt
adb pull/data/anr .
adb pull/data/tombstones .



Android用户空间应用如何调试crashes?
Android中每一个进程crashes发生,都将产生一个Tombstone的文件被进程写入,tombstone包含了进程什么时候crashed的信息。

这些打印的log(可以使用adb shell logcat打印),但是tombstones也能够保存和存储在/data/tombstones/,名字为tombstone_xx,没一次carsh,增加一个数组(xx)。

为了获取crashed进程的stacktrace信息,我们需要交叉引用tombstone的debug symbols。
一般debug symbols被stripped,当libraries加载rootfs以节省空间。

因此我们也需要dig响应的/out/product/xxx/symbols/system/libxx以获取unstripped libraries.
如果你有这个库文件,你能够通过addr2line获取行数和函数名。

我们使用addr2line命令提取相关stacktrace信息以及解析libraries。
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'unknown'
pid: 151, tid: 291 >>> system_server <<<
signal 11 (SIGSEGV), fault addr deadbaad
r0 00000000 r1 afd14701 r2 00000027 r3 00000074
r4 afd42328 r5 00000000 r6 00000000 r7 0000016a
r8 4a964958 r9 49131ecc 10 49131eb4 fp 4a964cc0
ip 00001740 sp 4a964748 lr deadbaad pc afd11d58 cpsr 60000070
d0 6e755f6e6f69746c d1 2f737562642f736f
d2 6e6f632d73756263 d3 2e6e6f697463656b
d4 2c64657269707865 d5 2065687420726f20
d6 206b726f7774656e d7 697463656e6e6f63
d8 0000000000000000 d9 0000000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 0033e31800000001 d17 3fe999999999999a
d18 42eccefa43de3400 d19 3fe00000000000b4
d20 4008000000000000 d21 3fd99a27ad32ddf5
d22 3fd24998d6307188 d23 3fcc7288e957b53b
d24 3fc74721cad6b0ed d25 3fc39a09d078c69f
d26 0000000000000000 d27 0000000000000000
d28 0000000000000000 d29 0000000000000000
d30 0000000000000000 d31 0000000000000000
scr 60000012

#00 pc 00011d58 /system/lib/libc.so
#01 pc 0002e926 /system/lib/libdbus.so
#02 pc 00016b2a /system/lib/libdbus.so
#03 pc 0000ecc0 /system/lib/libdbus.so
#04 pc 00023e42 /system/lib/libdbus.so
#05 pc 000106c4 /system/lib/libdbus.so
#06 pc 00013aec /system/lib/libdbus.so
#07 pc 00014b12 /system/lib/libdbus.so
#08 pc 00023cac /system/lib/libdbus.so
#09 pc 000140de /system/lib/libdbus.so
#10 pc 0005b59a /system/lib/libandroid_runtime.so
#11 pc 0005b650 /system/lib/libandroid_runtime.so
#12 pc 00010d74 /system/lib/libdvm.so
#13 pc 0003c8bc /system/lib/libdvm.so
#14 pc 000357cc /system/lib/libdvm.so
#15 pc 00015cd8 /system/lib/libdvm.so
#16 pc 0001c4b0 /system/lib/libdvm.so
#17 pc 0001b350 /system/lib/libdvm.so
#18 pc 000529f0 /system/lib/libdvm.so
#19 pc 0003f97e /system/lib/libdvm.so
#20 pc 0003423e /system/lib/libdvm.so
#21 pc 000471c0 /system/lib/libandroid_runtime.so
#22 pc 000474fe /system/lib/libandroid_runtime.so
#23 pc 000132f8 /system/lib/libbinder.so
#24 pc 00016638 /system/lib/libbinder.so
#25 pc 00016820 /system/lib/libbinder.so
#26 pc 0001c138 /system/lib/libbinder.so
#27 pc 0001bbe2 /system/lib/libutils.so
#28 pc 0002d982 /system/lib/libandroid_runtime.so
#29 pc 0001c078 /system/lib/libutils.so
#30 pc 00010f94 /system/lib/libc.so
#31 pc 00010a84 /system/lib/libc.so

code around pc:
afd11d38 2d00682d e029d1fb b12b68db c05cf8df
afd11d48 f8442001 4798000c e054f8df 26002227
afd11d58 2000f88e eeb0f7fb f7fc2106 f04fefde
afd11d68 91035180 460aa901 96012006 f7fc9602
afd11d78 a905eb54 20024632 eb5ef7fc ee9cf7fb

code around lr:
deadba8c ffffffff ffffffff ffffffff ffffffff
deadba9c ffffffff ffffffff ffffffff ffffffff
deadbaac ffffffff ffffffff ffffffff ffffffff
deadbabc ffffffff ffffffff ffffffff ffffffff
deadbacc ffffffff ffffffff ffffffff ffffffff

stack:
4a964708 00000015
4a96470c afd14731 /system/lib/libc.so
4a964710 afd425a0 /system/lib/libc.so
4a964714 afd4254c /system/lib/libc.so
4a964718 00000000
4a96471c afd1574b /system/lib/libc.so
4a964720 afd14701 /system/lib/libc.so
4a964724 afd14701 /system/lib/libc.so
4a964728 00000074
4a96472c afd42328 /system/lib/libc.so
4a964730 00000000
4a964734 4a96475c
4a964738 0000016a
4a96473c afd149a3 /system/lib/libc.so
4a964740 df002777
4a964744 e3a070ad

native crashes 问题,如果仅仅通过logcat/tombstone log没有发现root cause,我们需要 coredump更加深入分析。


android L & M平台如何获取 core dump o?
@@ -518,6 +535,8 @@ void load_persist_props(void) {
load_override_properties();
/* Read persistentproperties after all default values have been loaded. */
load_persistent_properties();
+ /*check for coredump*/
+ check_rlim_action();
}

步骤:
1.先 disable selinux,
如何 disable selinux , 参考以下命令
adb root
adb shell setenforce 0
如果使用以上命令,每次reboot设备,你需要重新设置。 2. 如果 ro.debuggable不等于 1, 设置 ro.debuggable为 1.
我们能够从设备中 pull ‘/system/build.prop’ , 改变属性值并且在push进设备中。adb root
adb pull /system/build.prop .
[change the ‘build.prop’ file]
adb push build.prop /system/
adb shell chmod 644 /system/build.prop
adb reboot

3. 设置 persist.debug.trace property 为 1使能 coredumps:
adb shell setprop persist.debug.trace 1
adb reboot

4. 运行着测试,当a segmentation fault,all dalvik processes以上步骤确保all dalvik processes能够创建core dumps。
force a crash,需要通过adb命令(kill -11 <pid>)发送signal 11 给此进程。

5. 当进程crashes,通过adb pull/data/core/命令pull出coredump文件,并且the mapsfile of the pid you want to debug。

#kill -6 <pid>
此命令将dump 所有的threads 的 native callstack进入tombstones 文件