2013-07-15 15 views
14

Mam błąd ANR w mojej aplikacji na Androida.Jak analizować plik Android/data/adr/trace.txt?

Za ślad jest poniżej

"głównego" i "GW-20153" są głównym problemem ANR?

DALVIK THREADS: 
(mutexes: tll=0 tsl=0 tscl=0 ghl=0) 
"main" prio=5 tid=1 SUSPENDED 
    | group="main" sCount=2 dsCount=1 obj=0x40aee490 self=0x1fbad70 
    | sysTid=3805 nice=0 sched=0/0 cgrp=default handle=1074664744 
    | schedstat=(378517060062 270739989762 791048) utm=33581 stm=4270 core=0 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:~2812) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2851) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1287) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:4945) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 

"Thread-20153" prio=5 tid=22 TIMED_WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x41463760 self=0x3018ea0 
    | sysTid=7466 nice=0 sched=0/0 cgrp=default handle=43164240 
    | schedstat=(32867433 91186523 62) utm=2 stm=1 core=0 
    at java.lang.VMThread.sleep(Native Method) 
    at java.lang.Thread.sleep(Thread.java:1047) 
    at java.lang.Thread.sleep(Thread.java:1029) 
    at com.mocoplex.adlib.AdlibManager$b.run(AdlibManager.java:1068) 

"Timer-3" prio=5 tid=18 TIMED_WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x4114a748 self=0x2984f48 
    | sysTid=5953 nice=0 sched=0/0 cgrp=default handle=46807576 
    | schedstat=(48645025 59570314 230) utm=4 stm=0 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x4114a748> (a java.util.Timer$TimerImpl) 
    at java.lang.Object.wait(Object.java:401) 
    at java.util.Timer$TimerImpl.run(Timer.java:238) 

"Timer-2" prio=5 tid=20 TIMED_WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x41103688 self=0x2a53738 
    | sysTid=5861 nice=0 sched=0/0 cgrp=default handle=43212688 
    | schedstat=(48461919 64544676 234) utm=4 stm=0 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x41103688> (a java.util.Timer$TimerImpl) 
    at java.lang.Object.wait(Object.java:401) 
    at java.util.Timer$TimerImpl.run(Timer.java:238) 

"Binder Thread #4" prio=5 tid=16 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x410d7a90 self=0x2877ef8 
    | sysTid=4496 nice=0 sched=0/0 cgrp=default handle=43222816 
    | schedstat=(556243916 622314442 2261) utm=30 stm=25 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"Binder Thread #3" prio=5 tid=21 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x40e9bd30 self=0x296a800 
    | sysTid=3971 nice=0 sched=0/0 cgrp=default handle=43484856 
    | schedstat=(755767858 956115700 2837) utm=47 stm=28 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"Timer-1" prio=5 tid=12 TIMED_WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40da4778 self=0x2817d28 
    | sysTid=3955 nice=0 sched=0/0 cgrp=default handle=42812624 
    | schedstat=(78033460 63385008 360) utm=3 stm=4 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40da4778> (a java.util.Timer$TimerImpl) 
    at java.lang.Object.wait(Object.java:401) 
    at java.util.Timer$TimerImpl.run(Timer.java:238) 

"Thread-19213" prio=5 tid=14 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x40f47bc0 self=0x28397d8 
    | sysTid=3894 nice=0 sched=0/0 cgrp=default handle=41749600 
    | schedstat=(6582580563 4471832242 16030) utm=317 stm=341 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"AsyncTask #1" prio=5 tid=19 WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40ec6b60 self=0x2799b10 
    | sysTid=3886 nice=10 sched=0/0 cgrp=default handle=41517920 
    | schedstat=(85784919 298645016 925) utm=5 stm=3 core=1 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40ec70f8> (a java.lang.VMThread) held by tid=19 (AsyncTask #1) 
    at java.lang.Thread.parkFor(Thread.java:1250) 
    at sun.misc.Unsafe.park(Unsafe.java:323) 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2022) 
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1009) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1069) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    at java.lang.Thread.run(Thread.java:864) 

"GAThread" prio=5 tid=17 WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40e14cd8 self=0x265ea78 
    | sysTid=3849 nice=0 sched=0/0 cgrp=default handle=40098064 
    | schedstat=(98105010984 112702484189 420613) utm=8608 stm=1202 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40e14f48> (a java.lang.VMThread) held by tid=17 (GAThread) 
    at java.lang.Thread.parkFor(Thread.java:1250) 
    at sun.misc.Unsafe.park(Unsafe.java:323) 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2022) 
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413) 
    at com.google.analytics.tracking.android.GAThread.run(GAThread.java:518) 

"Timer-0" prio=5 tid=15 TIMED_WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40e0b258 self=0x2644908 
    | sysTid=3847 nice=0 sched=0/0 cgrp=default handle=39852224 
    | schedstat=(8728025 27526859 49) utm=0 stm=0 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40e0b258> (a java.util.Timer$TimerImpl) 
    at java.lang.Object.wait(Object.java:401) 
    at java.util.Timer$TimerImpl.run(Timer.java:238) 

"CookieSyncManager" prio=5 tid=13 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x40dd51d8 self=0x2205750 
    | sysTid=3839 nice=10 sched=0/0 cgrp=default handle=35690744 
    | schedstat=(3601070 48522953 21) utm=0 stm=0 core=0 
    at android.os.MessageQueue.nativePollOnce(Native Method) 
    at android.os.MessageQueue.next(MessageQueue.java:118) 
    at android.os.Looper.loop(Looper.java:124) 
    at android.webkit.WebSyncManager.run(WebSyncManager.java:90) 
    at android.webkit.CookieSyncManager.run(CookieSyncManager.java:61) 
    at java.lang.Thread.run(Thread.java:864) 

"WebViewCoreThread" prio=5 tid=11 SUSPENDED 
    | group="main" sCount=1 dsCount=0 obj=0x40dd1000 self=0x21d3268 
    | sysTid=3837 nice=0 sched=0/0 cgrp=default handle=35024464 
    | schedstat=(108778259167 88950927721 209209) utm=9772 stm=1105 core=0 
    at android.os.MessageQueue.nativePollOnce(Native Method) 
    at android.os.MessageQueue.next(MessageQueue.java:118) 
    at android.os.Looper.loop(Looper.java:124) 
    at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:751) 
    at java.lang.Thread.run(Thread.java:864) 

"Binder Thread #2" prio=5 tid=10 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x40dab048 self=0x21b4f78 
    | sysTid=3817 nice=0 sched=0/0 cgrp=default handle=35045376 
    | schedstat=(753906254 1313110342 2682) utm=62 stm=13 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"Binder Thread #1" prio=5 tid=9 NATIVE 
    | group="main" sCount=1 dsCount=0 obj=0x40daa018 self=0x220b6c0 
    | sysTid=3816 nice=0 sched=0/0 cgrp=default handle=35448760 
    | schedstat=(763366698 866455078 2684) utm=56 stm=20 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"FinalizerWatchdogDaemon" daemon prio=5 tid=8 WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40da5910 self=0x21f8778 
    | sysTid=3815 nice=0 sched=0/0 cgrp=default handle=35648680 
    | schedstat=(19226068 112762454 289) utm=1 stm=0 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40af5ee8> (a java.lang.Daemons$FinalizerWatchdogDaemon) 
    at java.lang.Object.wait(Object.java:364) 
    at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:218) 
    at java.lang.Thread.run(Thread.java:864) 

"FinalizerDaemon" daemon prio=5 tid=7 WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40da57b8 self=0x21a4a20 
    | sysTid=3814 nice=0 sched=0/0 cgrp=default handle=35665600 
    | schedstat=(5843750080 8033416627 35050) utm=463 stm=121 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40ae45e8> (a java.lang.ref.ReferenceQueue) 
    at java.lang.Object.wait(Object.java:401) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73) 
    at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173) 
    at java.lang.Thread.run(Thread.java:864) 

"ReferenceQueueDaemon" daemon prio=5 tid=6 WAIT 
    | group="main" sCount=1 dsCount=0 obj=0x40da5650 self=0x21ce2e0 
    | sysTid=3813 nice=0 sched=0/0 cgrp=default handle=35653416 
    | schedstat=(1158782901 1858612107 6973) utm=98 stm=17 core=0 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x40ae4510> 
    at java.lang.Object.wait(Object.java:364) 
    at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:133) 
    at java.lang.Thread.run(Thread.java:864) 

"Compiler" daemon prio=5 tid=5 VMWAIT 
    | group="system" sCount=1 dsCount=0 obj=0x40da5560 self=0x21ee180 
    | sysTid=3812 nice=0 sched=0/0 cgrp=default handle=34074560 
    | schedstat=(1770019 3204346 7) utm=0 stm=0 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"JDWP" daemon prio=5 tid=4 VMWAIT 
    | group="system" sCount=1 dsCount=0 obj=0x40da5478 self=0x21f1988 
    | sysTid=3811 nice=0 sched=0/0 cgrp=default handle=34075744 
    | schedstat=(681671184 898101870 8811) utm=24 stm=44 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"Signal Catcher" daemon prio=5 tid=3 RUNNABLE 
    | group="system" sCount=0 dsCount=0 obj=0x40da5380 self=0x220ebd0 
    | sysTid=3809 nice=0 sched=0/0 cgrp=default handle=34074272 
    | schedstat=(6927491 39001465 8) utm=0 stm=0 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

"GC" daemon prio=5 tid=2 VMWAIT 
    | group="system" sCount=1 dsCount=0 obj=0x40da52a0 self=0x20801f0 
    | sysTid=3807 nice=0 sched=0/0 cgrp=default handle=35471536 
    | schedstat=(2660827614 3416412375 2552) utm=254 stm=12 core=0 
    at dalvik.system.NativeStart.run(Native Method) 

----- end 3805 ----- 

Ale nie wiem, gdzie jest kod problemu.

Jak interpretować to?

To zbyt długi ślad, a pytanie jest zbyt naiwne. Nie musisz wyjaśniać całego błędu, po prostu radzę jak interpretować tematy.

+0

możliwy duplikat [systemu Android - jak mogę zbadać ANR?] (Http://stackoverflow.com/questions/704311/android-how-do-i-investigate-an-anr) – rds

Odpowiedz

3

Do tej pory nie wygląda na to, że ma problem. Jak możemy zaobserwować tutaj, główny wątek jest zawieszony, a więc jest jeszcze jeden wątek o nazwie WebViewCoreThread, z wyjątkiem tych 2 wszystkie inne wydają się być całkiem w porządku albo robiąc klasyczny czekanie lub wyczekiwany czas, albo po prostu działający.

Dwa możliwe powody, dla których ANR mógł się tu zdarzyć, mogą wynikać z tego, że jeden z dwóch wątków jest zawieszony na czas nieokreślony, a android (system) pomyślałby, że umarł, po odczekaniu pewnego czasu, powiedzmy kilka sekund, w ten sposób rzucając ANR.

Możesz chcieć sprawdzić, czy w którymś z tych wątków są jakieś punkty przerwania, albo jeden z wątków wykonuje ciężki operat, w tym tworzenie obiektów prowadzących do gc, które również mogą spowodować przejście wątku w tryb zawieszony.

Sprawdź również dzienniki pod kątem każdego wpisu w systemie nadzorującym, zabijając dowolny proces systemu. Może to pomóc!

+0

Czy to oznacza "nie możemy znaleźć problemu w tym dzienniku" i powinniśmy znaleźć problem w kodzie według punktu przerwania? –

+0

Nie, możemy znaleźć problem z tych dzienników w pewnym stopniu, np. Powiedzmy, że możemy zobaczyć, czy występuje jakaś martwa kłódka, która może spowodować ANR (a także spowodować, że strażnik zabije najważniejsze usługi). Aby dowiedzieć się więcej, chcesz zaglądać do logów systemowych wraz z plikiem traces.txt A co mam na myśli przez punkt przerwania tutaj, sprawdź, czy już umieściłeś punkt przerwania w jednym z tych wątków, jeśli tak, usuń go i następnie uruchom ponownie aplikację. Punkt przerwania mógł zatrzymać przepływ kontroli i umieścić główny wątek w trybie zawieszonym, powodując wstrzymanie blokady –

+0

SUSPENDED było jednym ze słów kluczowych. dzięki. –