L'app Android si arresta in modo anomalo quando viene avviata in modalità debug


290

Quando corro in modalità debug l'app si blocca, ma quando la eseguo normalmente funziona. Penso che il problema si verifichi quando il debugger è collegato.

log:

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

Non so cosa sia successo, ma ora funziona. Magia!!!
Maxim Rabtsun,

Ho riscontrato lo stesso problema ed era completo BS. Anche riavviare l'emulatore non ha aiutato. Dopo aver rimosso un sacco di codice e averlo poi letto in un blocco alla volta, sono tornato al codice originale e il problema era scomparso. Ho la sensazione che l'oggetto di classe avesse solo bisogno di essere ricostruito. Una compilazione è andata storta. Immagino che un progetto "pulito" probabilmente lo avrebbe risolto.
Dakusan,

Quasi 3 anni dopo, questo bug è ancora presente.
Attila Tanyi,

Risposte:


321

Per me, si è verificato quando ho un punto di interruzione in una funzione nidificata. Nel mio caso, era dentro Runnable.run() {}. Non sono sicuro se succede in altre funzioni nidificate.

Esempio:

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

Se c'è un punto di interruzione su qualsiasi riga all'interno della funzione run (), si blocca con l'errore A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread.

Questo errore si verifica la prima volta che si incontra la classe, NON quando viene raggiunto il punto di interruzione. Quindi è successo a me quando sono entrato in una linea che era new TouchEvent();prima che fosse eseguito qualsiasi codice del TouchEvent (prima del costruttore).

La soluzione è rimuovere il punto di interruzione (e metterlo altrove).

Modificare:

Ho dimenticato di menzionare, sembra essere legato a API25, ma è stato segnalato anche per API26 e API27.

Modificare:

Un'altra soluzione è disabilitare Instant Run , ma ti preghiamo di dare credito @ toobsco42 per quello qui sotto.


28
Questo è stato segnalato su code.google.com e sto lavorando per risolverlo. code.google.com/p/android/issues/detail?id=227513
Dakusan

4
Ho SDK 23 e strumenti di costruzione 25.0.1 - stesso problema. La rimozione dei punti di interruzione risolve questo problema.
Bonton255,

2
Puoi anche rimuovere il punto di interruzione, premere Debug, quindi una volta che l'app è in esecuzione OK, aggiungila nuovamente nel punto desiderato. Funziona bene quindi, ricordati di rimuoverlo prima di riavviare.
pesce cometa

3
Ho cambiato gli emulatori e il problema è andato via - è tornato all'emulatore originale e il problema è tornato. Una volta che il problema appare l'unico modo per risolverlo (oltre a cancellare tutti i punti di interruzione - no grazie) è disabilitare Instant Run. La riattivazione di Instant Run sull'emulatore del problema riporta il problema.
Andy,

11
Il problema è un mix di punti di interruzione in altri thread su 7.1.1 con esecuzione istantanea attivata. Quindi cambia uno dei 3 precedenti e smetterà di bloccarsi.
Warpzit,

187

Nel mio caso ho dovuto disabilitare Instant Run. Sembra che Instant Run abbia tutti i tipi di effetti collaterali e questo può essere uno di questi.


47
Nota, in Android Studio, è disponibile in File -> Impostazioni -> Build, Execution, Deployment -> Instant Run.
shortstuffsushi,

È stato anche il mio caso! Grazie: D
francisco_ssb

9
È stata un'ora della mia vita che non rivedrò mai più
Gary Bak,

3
Lavorando su più macchine, con Google che riapplica costantemente la corsa istantanea, ne avrei bisogno per rendermi circa il 4216% più efficiente quando finalmente funzionerà per avvicinarmi da remoto per riavere indietro il tempo perso.
Anthony,

grazie mille. dovrebbe essere spuntato come risposta;) questa brutta caratteristica ti dà un cinque centesimi e ti fa
perdere

50

Il problema è legato alla versione 7.x di Android, ho rimosso tutti i punti di interruzione nelle funzioni nidificate e ha funzionato, testato anche con la versione 6.0 di Android e funziona senza problemi.

Secondo la risposta del team di sviluppatori di Google, è stato risolto il 12/1/2016 e verrà applicato nella prossima versione.


provato tutto il possibile, sopra commento aiutato! molte grazie!
Stepan Maksymov,

Ha funzionato, questa dovrebbe essere una risposta accettata. Grazie ! Inoltre, puoi rimuovere Instant Run come un'altra soluzione
Özer Özcan il

Sarebbe bello se fosse collegato un link per supportare questo;) "Secondo la risposta del team di sviluppatori di Google, è stato risolto il 12/1/2016 e verrà applicato nella prossima versione."
jabu.hlong,

Probabilmente è stata una risposta via e-mail, ricevendo ancora questo bug oggi e ho dovuto rimuovere i punti di interruzione
Jim Factor,

Android 7.1.1 è ancora la versione di Android in esecuzione sul Pixelbook. Lo capisco continuamente svilupparsi in Android Studio sul Pixelbook!
Jeff Lockhart,

21

Ho rimosso tutti i punti di interruzione e ha funzionato, testato con Emulator Pixel API 25.

Per rimuovere tutti i punti di interruzione:

  • Vai all'opzione Debugger.

  • Fai clic sull'icona rossa che è in basso per interrompere il debug.

  • Verrà visualizzata una finestra in cui è possibile rimuovere tutti i punti di interruzione.

Scopri di più in questo post: https://stackoverflow.com/a/42478994/5749462


16

Ciò è dovuto a qualche problema con i punti di debug. Rimuovere tutti i punti di debug e quindi dovrebbe funzionare.


3
È possibile utilizzare la scorciatoia CTRL + MAIUSC + F8 per deselezionare facilmente tutti i punti di interruzione.
brunoramonalmeida,

Questa scorciatoia non funziona sempre a seconda delle impostazioni del sistema operativo e della tastiera
flame3

8

È davvero strano, ho disabilitato Instant Run e il problema si è risolto da solo.


Sì, l'esecuzione istantanea su dispositivi con Android 7.0 potrebbe causare questo problema abbastanza facilmente
egorikem,

4

Il mio problema era che avevo un punto di interruzione nella dichiarazione di importazione


E mi sono imbattuto in questo per la terza volta ... Fondamentalmente, ogni punto di interruzione a volte può causare questo, quindi la soluzione potrebbe essere solo quella di rimuovere tutti / i punti di interruzione recenti
egorikem,

3

inserisci qui la descrizione dell'immagine

Nella finestra 5: debug, utilizzare il pulsante "Visualizza punti di interruzione"

inserisci qui la descrizione dell'immagine

Deseleziona Tutti

inserisci qui la descrizione dell'immagine


1

La soluzione più semplice sta cercando di trovare un altro dispositivo o emulatore (grazie a AVD Manager abbiamo una scelta) che funzionerà come un incantesimo senza soluzioni alternative


1

Anche la mia app si è arrestata in modo anomalo solo in modalità debug. Per quanto riguarda la versione 3.5 - "Instant Run" è stato sostituito con "Applica modifiche", quindi non ho potuto disabilitarlo. La mia soluzione era quella di avviare l'app normalmente (con la freccia verde), navigare subito dopo il luogo in cui si era schiantato e quindi collegare il debugger ad esso:
inserisci qui la descrizione dell'immagine


0

La rimozione del breakpoint da Runable.run () ha risolto il problema per me. Sono stato in grado di utilizzare i punti di interruzione in fase di esecuzione all'interno di Runable.run (). Ma non in fase di compilazione


0

Si è imbattuto in questo stesso problema, ma il mio punto di interruzione era la prima riga nella funzione nidificata, quindi come spostarlo altrove?

Ho creato un metodo privato temporaneo e ho fatto una chiamata a quel metodo la prima cosa nella funzione e quindi ho impostato il punto di interruzione in quel metodo.

Al termine del debug ho rimosso il metodo e la sua chiamata.


0

è un colpo lungo, ma per me, quando ho una dichiarazione di importazione che non viene utilizzata e che l'importazione ha un codice che esegue le chiamate di rete, si è arrestato in modo anomalo per me, ma quando è stato rimosso, il codice è stato in grado di eseguire il debug normalmente.


0

Avvio in crash solo quando si avvia con il debugger. Riavviato Android Studio 2.3.2 ... continuava a bloccarsi. Funziona bene in modalità Run. Ho inserito un Log.d () subito dopo onCreate ... e il problema è stato risolto! Vai a capire!


0

Elimina tutti i punti di debug sulla mia applicazione funziona bene, puoi usare ctrl + shift + f6 per rimuovere tutti i punti di debug

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.