抓取ANR log的方法

ANR简介

APP出现进程无响应之后,系统通常会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框,用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”,但是无法定位导致出现anr的原因。我们可以通过抓取anr log,帮助我们定位导致APP出现anr的原因。APP运行出现anr的同时,会在data目录下生成一个 anr 的文件,anr log存储在此文件夹下,将其导出即可。

查看APP ANR文件的方法

手机连接USB ,进入CMD命令窗口,输入以下命令:
 >adb shell  
$ su 
# cd data  
# ls 
在列出的文件列表有一个 anr 文件; 

导出anr log的方法

进入CMD命令窗口,输入以下命令: 
> adb pull /data/anr/traces.txt D:\  
即可将APP生成的anr log文件导出到PC D盘根目录下。
PS:APP生成的anr log存储在手机/data/anr目录下的traces.txt文件里。

定位ANR异常

log日志如下:
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 obj=0x74a50f90 self=0x7fa197ba00
| sysTid=2588 nice=-1 cgrp=top_visible sched=0/0 handle=0x7fa5ebb000
| state=S schedstat=( 1613773720 221538200 2428 ) utm=133 stm=28 core=3 HZ=100
| stack=0x7fcc7c8000-0x7fcc7ca000 stackSize=8MB
| held mutexes=
kernel: __switch_to+0x74/0x8c
kernel: futex_wait_queue_me+0xd8/0x168
kernel: futex_wait+0xe4/0x234
kernel: do_futex+0x184/0xa54
kernel: SyS_futex+0x88/0x19c
kernel: cpu_switch_to+0x48/0x4c
native: #00 pc 000000000001cef0 /system/lib64/libc.so (syscall+28)
native: #01 pc 00000000000679c4 /system/lib64/libc.so (_ZL33__pthread_mutex_lock_with_timeoutP24pthread_mutex_internal_tPK8timespeci.constprop.0+260)
native: #02 pc 0000000000067d4c /system/lib64/libc.so (pthread_mutex_lock+36)
native: #03 pc 00000000000da578 /data/app/com.yzxdemo-1/lib/arm64/libUGo.so (_ZN9Conductor26VideoSetSendReciveRotationEjj+44)
native: #04 pc 00000000000b4208 /data/app/com.yzxdemo-1/lib/arm64/libUGo.so (_Z33me_video_set_send_recive_rotationjj+40)
native: #05 pc 000000000006cbbc /data/app/com.yzxdemo-1/oat/arm64/base.odex (int com.gl.softphone.UGoManager.UGoVideoSetSendReciveRotation(int, int)+144)
native: #06 pc 000000000006f3a0 /data/app/com.yzxdemo-1/oat/arm64/base.odex (int com.gl.softphone.UGoManager.pub_UGoVideoSetSendReciveRotation(int, int)+84)
native: #07 pc 000000000008cd88 /data/app/com.yzxdemo-1/oat/arm64/base.odex (void com.yzx.api.UCSCall.videoSetSendReciveRotation(int, int)+124)
native: #08 pc 0000000000136d3c /data/app/com.yzxdemo-1/oat/arm64/base.odex (void com.yzxdemo.activity.VideoConverseActivity$4.onSensorChanged(android.hardware.SensorEvent)+528)
native: #09 pc 0000000000ee5e68 /data/dalvik-cache/arm64/system@framework@boot.oat (???)
at com.gl.softphone.UGoManager.UGoVideoSetSendReciveRotation(Native method)
at com.gl.softphone.UGoManager.pub_UGoVideoSetSendReciveRotation(UGoManager.java:280)
- locked <0x0b2f89b7> (a com.gl.softphone.UGoManager)
at com.yzx.api.UCSCall.videoSetSendReciveRotation(UCSCall.java:1050)
at com.yzxdemo.activity.VideoConverseActivity$4.onSensorChanged(VideoConverseActivity.java:434)
at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:496)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:330)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5665)
at java.lang.reflect.Method.invoke!(Native method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:822)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:712)
我们从traces.txt异常日志文件中导出了关键日志,其中红色的这两行可以定位出问题的所在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章