如何获取Android ANR log和 userspace stability issues?

如何获取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信息,我们需要交叉引用tombstonedebug symbols

一般debug symbolsstripped,当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/命令pullcoredump文件,并且the mapsfile of the pid you want to debug。

 

#kill -6 <pid>

此命令将dump 所有的threads 的 native callstack进入tombstones 文件




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值