L'application Android se bloque lorsqu'elle est lancée en mode débogage

290

Lorsque j'exécute en mode débogage , l'application se bloque, mais lorsque je l'exécute normalement, cela fonctionne. Je pense que le problème se produit lorsque le débogueur est connecté.

Journal:

A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x7f44a18400, GetDebugThread()=0x7f44a18400) Expected event thread
A/art: art/runtime/runtime.cc:422] Runtime aborting...
A/art: art/runtime/runtime.cc:422] Aborting thread:
A/art: art/runtime/runtime.cc:422] "JDWP" prio=5 tid=4 WaitingForDebuggerSend
A/art: art/runtime/runtime.cc:422]   | group="" sCount=0 dsCount=0 obj=0x12c60280 self=0x7f44a18400
A/art: art/runtime/runtime.cc:422]   | sysTid=24137 nice=0 cgrp=default sched=0/0 handle=0x7f4b904450
A/art: art/runtime/runtime.cc:422]   | state=R schedstat=( 132066712 16401043 106 ) utm=9 stm=2 core=3 HZ=100
A/art: art/runtime/runtime.cc:422]   | stack=0x7f4b80a000-0x7f4b80c000 stackSize=1005KB
A/art: art/runtime/runtime.cc:422]   | held mutexes= "abort lock"
A/art: art/runtime/runtime.cc:422]   native: #00 pc 000000000047e2cc  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+220)
A/art: art/runtime/runtime.cc:422]   native: #01 pc 000000000047e2c8  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+216)
A/art: art/runtime/runtime.cc:422]   native: #02 pc 0000000000452434  /system/lib64/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+480)
A/art: art/runtime/runtime.cc:422]   native: #03 pc 00000000004403ac  /system/lib64/libart.so (_ZNK3art10AbortState10DumpThreadERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEPNS_6ThreadE+56)
A/art: art/runtime/runtime.cc:422]   native: #04 pc 0000000000440228  /system/lib64/libart.so (_ZNK3art10AbortState4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+668)
A/art: art/runtime/runtime.cc:422]   native: #05 pc 0000000000433bfc  /system/lib64/libart.so (_ZN3art7Runtime5AbortEPKc+148)
A/art: art/runtime/runtime.cc:422]   native: #06 pc 00000000000e597c  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+1592)
A/art: art/runtime/runtime.cc:422]   native: #07 pc 00000000002f8458  /system/lib64/libart.so (_ZN3art4JDWP9JdwpState24AcquireJdwpTokenForEventEm+624)
A/art: art/runtime/runtime.cc:422]   native: #08 pc 00000000002f7b1c  /system/lib64/libart.so (_ZN3art4JDWP9JdwpState29SendRequestAndPossiblySuspendEPNS0_9ExpandBufENS0_17JdwpSuspendPolicyEm+248)
A/art: art/runtime/runtime.cc:422]   native: #09 pc 00000000002fcb08  /system/lib64/libart.so (_ZN3art4JDWP9JdwpState16PostClassPrepareEPNS_6mirror5ClassE+1380)
A/art: art/runtime/runtime.cc:422]   native: #10 pc 0000000000124a9c  /system/lib64/libart.so (_ZN3art11ClassLinker11DefineClassEPNS_6ThreadEPKcmNS_6HandleINS_6mirror11ClassLoaderEEERKNS_7DexFileERKNS9_8ClassDefE+804)
A/art: art/runtime/runtime.cc:422]   native: #11 pc 0000000000381d04  /system/lib64/libart.so (_ZN3artL25DexFile_defineClassNativeEP7_JNIEnvP7_jclassP8_jstringP8_jobjectS7_S7_+344)
A/art: art/runtime/runtime.cc:422]   native: #12 pc 00000000001dd40c  /system/framework/arm64/boot-core-libart.oat (???)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexFile.defineClassNative(Native method)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexFile.defineClass(DexFile.java:296)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:289)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexPathList.findClass(DexPathList.java:418)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
A/art: art/runtime/runtime.cc:422]   at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
A/art: art/runtime/runtime.cc:422]   at com.android.tools.fd.runtime.IncrementalClassLoader.findClass(IncrementalClassLoader.java:62)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
A/art: art/runtime/runtime.cc:422] Dumping all threads without appropriate locks held: thread list lock mutator lock
Maxim Rabtsun
la source
Je ne sais pas ce qui s'est passé, mais maintenant ça marche. La magie!!!
Maxim Rabtsun
J'ai rencontré le même problème et c'était complet BS. Même le redémarrage de l'émulateur n'a pas aidé. Après avoir supprimé un tas de code puis l'avoir lu dans un bloc à la fois, je suis revenu au code d'origine et le problème avait disparu. J'ai l'impression que l'objet de classe avait juste besoin d'être reconstruit. Une compilation a mal tourné. Je suppose qu'un projet "propre" l'aurait probablement corrigé.
Dakusan
Près de 3 ans plus tard, ce bug est toujours présent.
Attila Tanyi

Réponses:

321

Pour moi, cela s'est produit lorsque j'ai un point d'arrêt dans une fonction imbriquée. Dans mon cas, c'était dansRunnable.run() {} . Je ne sais pas si cela se produit dans d'autres fonctions imbriquées.

Exemple:

public class TouchEvent {
    public boolean HandleEvent(MotionEvent Event) {
        new Runnable() { @Override public void run() {
            int i=5;
            i++;
        }};
    }
}

S'il y a un point d'arrêt sur une ligne à l'intérieur du func run (), il se bloque avec l'erreur A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread .

Cette erreur se produit la première fois que la classe est rencontrée, PAS lorsque le point d'arrêt est atteint. Donc ça m'est arrivé quand je suis entré dans une ligne qui avaitnew TouchEvent(); , avant l'exécution du code de TouchEvent (avant le constructeur).

La solution est de supprimer le point d'arrêt (et de le mettre ailleurs).

Éditer:

Oublié de mentionner, il semble être lié à API25, mais a également été signalé pour API26 et API27.

Éditer:

Une autre solution consiste à désactiver Instant Run , mais merci de donner @ toobsco42 pour cela ci-dessous.

Dakusan
la source
28
Cela a été signalé sur code.google.com et je travaille à le corriger. code.google.com/p/android/issues/detail?id=227513
Dakusan
4
J'ai SDK 23 et les outils de construction 25.0.1 - même problème. La suppression des points d'arrêt résout ce problème.
Bonton255
2
Vous pouvez également supprimer le point d'arrêt, appuyer sur Déboguer, puis une fois que l'application fonctionne correctement, l'ajouter à l'endroit souhaité. Fonctionne bien alors, n'oubliez pas de le supprimer avant de redémarrer.
cometfish
3
J'ai changé d'émulateur et le problème a disparu - je suis revenu à l'émulateur d'origine et le problème est revenu. Une fois que le problème apparaît, le seul moyen de le surmonter (en plus d'effacer tous les points d'arrêt - non merci) est de désactiver Instant Run. La réactivation d'Instant Run sur l'émulateur de problème ramène le problème.
Andy
11
Le problème est un mélange de points d'arrêt dans d'autres threads sur 7.1.1 avec exécution instantanée. Modifiez donc l'un des 3 ci-dessus et il cessera de planter.
Warpzit
187

Dans mon cas, j'ai dû désactiver Instant Run. Il semble qu'Instant Run ait toutes sortes d'effets secondaires et cela peut être l'un d'entre eux.

toobsco42
la source
47
Notez, dans Android Studio, que se trouve sous Fichier -> Paramètres -> Build, Execution, Deployment -> Instant Run.
shortstuffsushi
C'était mon cas aussi! Merci: D
francisco_ssb
9
Ce fut une heure de ma vie que je ne reverrai jamais
Gary Bak
3
Travaillant sur plusieurs machines, avec Google réappliquant constamment une exécution instantanée, j'en aurais besoin pour me rendre environ 4216% plus efficace quand cela fonctionne enfin pour me rapprocher à distance de récupérer mon temps perdu.
Anthony
merci beaucoup. devrait être cochée comme réponse;) cette caractéristique laide vous donne cinq cents et vous fait
perdre
50

Le problème est lié à Android version 7.x, j'ai supprimé tous les points d'arrêt dans les fonctions imbriquées et cela a fonctionné, testé avec Android version 6.0 également, et cela fonctionne sans problème.

Selon la réponse de l'équipe de développeurs Google, elle a été corrigée le 01/12/2016 et sera appliquée dans la prochaine version.

hcknl
la source
essayé tout possible, le commentaire ci-dessus a aidé! Merci beaucoup!
Stepan Maksymov du
Cela a fonctionné, cela devrait être une réponse acceptée. Merci ! En outre, vous pouvez supprimer Instant Run comme une autre solution
Özer Özcan
Ce serait bien si un lien était attaché pour soutenir cela;) "Selon la réponse de l'équipe de développeurs Google, il a été corrigé le 01/12/2016 et sera appliqué dans la prochaine version."
jabu.hlong
Probablement une réponse par e-mail, obtenant toujours ce bogue aujourd'hui et a dû supprimer des points d'arrêt
Jim Factor
Android 7.1.1 est toujours la version d'Android fonctionnant sur le Pixelbook. Je reçois cela tout le temps en développant dans Android Studio sur le Pixelbook!
Jeff Lockhart
21

J'ai supprimé tous les points d'arrêt et cela a fonctionné, testé avec Emulator Pixel API 25.

Pour supprimer tous les points d'arrêt:

  • Accédez à l'option Débogueur.

  • Cliquez sur l'icône rouge ci-dessous pour arrêter le débogage.

  • Vous verrez une fenêtre où vous pourrez supprimer tous les points d'arrêt.

Voir plus dans cet article: https://stackoverflow.com/a/42478994/5749462

creonilso rodrigues
la source
16

Cela est dû à un problème avec les points de débogage. Supprimez tous les points de débogage et cela devrait fonctionner.

flamme3
la source
3
Vous pouvez utiliser le raccourci CTRL + MAJ + F8 pour décocher facilement tous les points d'arrêt.
brunoramonalmeida
Ce raccourci ne fonctionne pas tout le temps en fonction des paramètres de votre système d'exploitation et de votre clavier
flame3
8

C'est vraiment bizarre, j'ai désactivé Instant Run et le problème s'est résolu.

mbpakalin
la source
Oui, l'exécution instantanée sur des appareils sous Android 7.0 peut provoquer ce problème assez facilement
egorikem
4

Mon problème était que j'avais un point d'arrêt à la déclaration d'importation

egorikem
la source
Et j'ai rencontré cela pour la troisième fois ... Fondamentalement, tout point d'arrêt peut parfois provoquer cela, donc la solution peut être simplement de supprimer tous les points d'arrêt / récents
egorikem
3

entrez la description de l'image ici

Dans la fenêtre 5: Debug, utilisez le bouton "View Breakpoints"

entrez la description de l'image ici

Désélectionner Tous

entrez la description de l'image ici

Nicoolasens
la source
1

La solution la plus simple consiste à trouver un autre appareil ou émulateur (merci AVD Manager, nous avons le choix) qui fonctionnera comme un charme sans solution de contournement

yoAlex5
la source
1

Mon application s'est également bloquée uniquement en mode débogage. Quant à la version 3.5 - "Instant Run" a été remplacé par "Apply Changes", donc je ne pouvais pas le désactiver. Ma solution était de lancer l'application normalement (avec la flèche verte), de naviguer juste après l'endroit où elle plantait puis d'y attacher le débogueur:
entrez la description de l'image ici

TMD
la source
0

La suppression du point d'arrêt de Runable.run () a résolu le problème pour moi. J'ai pu utiliser des points d'arrêt lors de l'exécution dans Runable.run (). Mais pas au moment de la compilation

Ankush
la source
0

Ran dans ce même problème, mais mon point d'arrêt était la première ligne de la fonction imbriquée alors comment le déplacer ailleurs?

J'ai créé une méthode privée temporaire et fait de l'invocation de cette méthode la première chose dans la fonction, puis j'ai défini le point d'arrêt dans cette méthode.

Une fois le débogage terminé, j'ai supprimé la méthode et son appel.

Bartonstanley
la source
0

c'est un long plan mais pour moi, quand j'ai une instruction d'importation qui n'est pas utilisée, et que l'importation a du code qui exécute les appels réseau, elle s'est bloquée pour moi mais lors de sa suppression, le code a pu déboguer normalement.

reidisaki
la source
0

Commencer à planter uniquement lors du démarrage avec le débogueur. Redémarrage d'Android Studio 2.3.2 ... continuait de planter. Fonctionne bien en mode Exécution. J'ai mis un Log.d () juste après onCreate ... et cela a résolu le problème! Allez comprendre!

IrvineCAGuy
la source
0

Supprimer tous les points de débogage de mon application fonctionne correctement, vous pouvez utiliser ctrl + shift + f6 pour supprimer tous les points de débogage

Arun Prajapati
la source