抓取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異常日誌文件中導出了關鍵日誌,其中紅色的這兩行可以定位出問題的所在。

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