Aplikacja na Androida ulega awarii po uruchomieniu w trybie debugowania

290

Gdy uruchamiam w trybie debugowania , aplikacja ulega awarii, ale gdy uruchamiam ją normalnie, działa. Myślę, że problem występuje, gdy podłączony jest debugger.

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
Maxim Rabtsun
źródło
Nie wiem, co się stało, ale teraz działaj. Magia!!!
Maxim Rabtsun
Natknąłem się na ten sam problem i był to kompletny BS. Nawet ponowne uruchomienie emulatora nie pomogło. Po usunięciu wiązki kodu, a następnie odczytaniu go pojedynczo, wróciłem do pierwotnego kodu i problem zniknął. Mam wrażenie, że obiekt klasy musiał zostać przebudowany. Kompilacja poszła nie tak. Domyślam się, że projekt „czysty” prawdopodobnie go naprawiłby.
Dakusan
Prawie 3 lata później ten błąd jest nadal obecny.
Attila Tanyi

Odpowiedzi:

321

Dla mnie miało to miejsce, gdy mam punkt przerwania w zagnieżdżonej funkcji. W moim przypadku było w środku Runnable.run() {}. Nie jestem pewien, czy dzieje się tak w przypadku innych zagnieżdżonych funkcji.

Przykład:

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

Jeśli w dowolnym wierszu functu run () znajduje się punkt przerwania, następuje awaria z błędem A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread.

Ten błąd występuje przy pierwszym napotkaniu klasy, NIE przy trafieniu punktu przerwania. Tak mi się zdarzyło, gdy wszedłem do linii, która istniała new TouchEvent();przed uruchomieniem kodu TouchEvent (przed konstruktorem).

Rozwiązaniem jest usunięcie punktu przerwania (i umieszczenie go w innym miejscu).

Edytować:

Zapomniałem wspomnieć, wydaje się, że jest on powiązany z API25, ale został zgłoszony również dla API26 i API27.

Edytować:

Innym rozwiązaniem jest wyłączenie Instant Run , ale proszę dać @ toobsco42 kredyt za to poniżej.

Dakusan
źródło
28
Zostało to zgłoszone na code.google.com i pracuję nad tym, aby to naprawić. code.google.com/p/android/issues/detail?id=227513
Dakusan
4
Mam SDK 23 i buduję narzędzia 25.0.1 - ten sam problem. Usunięcie punktów przerwania naprawia to.
Bonton255,
2
Możesz także usunąć punkt przerwania, nacisnąć Debuguj, a następnie, gdy aplikacja działa OK, dodaj go z powrotem do żądanego miejsca. Działa to dobrze, pamiętaj tylko o usunięciu go przed ponownym uruchomieniem.
cometfish
3
Włączyłem emulatory i problem zniknął - wróciłem do oryginalnego emulatora i problem wrócił. Gdy problem pojawi się, jedynym sposobem na jego pokonanie (oprócz wyczyszczenia wszystkich punktów przerwania - nie, dziękuję) jest wyłączenie Natychmiastowego uruchamiania. Ponowne włączenie Instant Run na emulatorze problemów przywraca problem.
Andy
11
Problemem jest połączenie punktów przerwania w innych wątkach w 7.1.1 z natychmiastowym uruchomieniem. Więc zmień dowolne z powyższych 3, a przestanie się zawieszać.
Warpzit,
187

W moim przypadku musiałem wyłączyć Instant Run. Wygląda na to, że Instant Run ma wiele efektów ubocznych i może to być jeden z nich.

toobsco42
źródło
47
Uwaga: w Android Studio znajduje się w obszarze Plik -> Ustawienia -> Kompilacja, wykonanie, wdrożenie -> Natychmiastowe uruchomienie.
shortstuffsushi,
To też była moja sprawa! Dzięki: D
francisco_ssb
9
To była godzina mojego życia, której nigdy więcej nie zobaczę
Gary Bak
3
Pracując na wielu komputerach, przy ciągłym ponownym stosowaniu przez Google natychmiastowego uruchomienia, potrzebuję go, aby zwiększyć wydajność o około 4216%, gdy wreszcie działa zdalnie, by zbliżyć się do odzyskania straconego czasu.
Anthony
bardzo cholernie dziękuje. należy zaznaczyć jako odpowiedź;) ta brzydka funkcja daje ci pięć centów i marnuje sto dolarów :))
Amir Ziarati
50

Problem związany jest z Androidem w wersji 7.x, usunąłem wszystkie punkty przerwania w zagnieżdżonych funkcjach i działał, testowałem również z Androidem w wersji 6.0 i działa bez problemu.

Według odpowiedzi zespołu programistów Google, zostało to naprawione 12/1/2016 i zostanie zastosowane w następnej wersji.

hcknl
źródło
próbowałem wszystkich możliwych, powyższy komentarz pomógł! wielkie dzięki!
Stepan Maksymov
Udało się, należy zaakceptować odpowiedź. Dzięki ! Możesz także usunąć Instant Run jako inne rozwiązanie
Özer Özcan
Byłoby miło, gdyby załączono link do obsługi tego;) „Według odpowiedzi zespołu programistów Google, zostało to naprawione 12/1/2016 i zostanie zastosowane w następnej wersji”.
jabu.hlong
Prawdopodobnie była to odpowiedź na wiadomość e-mail, która wciąż otrzymywała ten błąd i musiała usunąć punkty przerwania
Jim Factor
Android 7.1.1 jest nadal wersją Androida działającą na Pixelbook. Rozumiem to cały czas rozwijając się w Android Studio na Pixelbook!
Jeff Lockhart
21

Usunąłem wszystkie punkty przerwania i zadziałało, przetestowane z Emulator Pixel API 25.

Aby usunąć wszystkie punkty przerwania:

  • Przejdź do opcji Debugger.

  • Kliknij czerwoną ikonę poniżej, aby zatrzymać debugowanie.

  • Zobaczysz okno, w którym możesz usunąć wszystkie punkty przerwania.

Zobacz więcej w tym poście: https://stackoverflow.com/a/42478994/5749462

creonilso rodrigues
źródło
16

Jest to spowodowane pewnym problemem z punktami debugowania. Usuń wszystkie punkty debugowania, a następnie powinno działać.

płomień 3
źródło
3
Możesz użyć skrótu CTRL + SHIFT + F8, aby łatwo odznaczyć wszystkie punkty przerwania.
brunoramonalmeida
Ten skrót nie działa cały czas w zależności od ustawień systemu operacyjnego i klawiatury
flame3
8

To naprawdę dziwne, wyłączyłem Instant Run i problem sam się rozwiązał.

Mbpakalin
źródło
Tak, natychmiastowe uruchomienie na urządzeniach z Androidem 7.0 może spowodować ten problem dość łatwo
egorikem
4

Mój problem polegał na tym, że miałem punkt przerwania na wyciągu z importu

egorikem
źródło
I natknąłem się na to po raz trzeci ... Zasadniczo każdy punkt przerwania może czasem to powodować, dlatego rozwiązaniem może być po prostu usunięcie wszystkich / ostatnich punktów przerwania
egorikem
3

wprowadź opis zdjęcia tutaj

W oknie 5: Debugowanie użyj przycisku „Zobacz punkty przerwania”

wprowadź opis zdjęcia tutaj

Odznacz wszystkie z nich

wprowadź opis zdjęcia tutaj

Nicoolasens
źródło
1

Najprostszym rozwiązaniem jest znalezienie innego urządzenia lub emulatora (dzięki AVD Manager mamy wybór), który będzie działał jako urok bez obejść

yoAlex5
źródło
1

Moja aplikacja również uległa awarii tylko w trybie debugowania. Jeśli chodzi o wersję 3.5 - „Instant Run” został zastąpiony przez „Apply Changes”, więc nie mogłem go wyłączyć. Moim rozwiązaniem było normalne uruchomienie aplikacji (z zieloną strzałką), nawigacja tuż po miejscu, w którym się zawiesiła, a następnie dołączenie do niej debuggera:
wprowadź opis zdjęcia tutaj

TDG
źródło
0

Usunięcie punktu przerwania z Runable.run () rozwiązało problem dla mnie. Byłem w stanie używać punktów przerwania w czasie wykonywania wewnątrz Runable.run (). Ale nie w czasie kompilacji

Ankush
źródło
0

Wystąpił ten sam problem, ale mój punkt przerwania był pierwszym wierszem w funkcji zagnieżdżonej, więc jak przenieść go w inne miejsce?

Utworzyłem tymczasową metodę prywatną i najpierw wywołałem tę metodę, a następnie ustawiłem punkt przerwania w tej metodzie.

Po zakończeniu debugowania usunąłem metodę i jej wywołanie.

Bartonstanley
źródło
0

jest to dalekie ujęcie, ale dla mnie, gdy mam nieużywaną instrukcję importu, a ten import zawiera kod, który uruchamia połączenia sieciowe, zawiesił się dla mnie, ale po jego usunięciu kod mógł normalnie debugować.

Reidisaki
źródło
0

Zaczyna się zawieszać tylko podczas uruchamiania z debuggera. Ponownie uruchomiłem Android Studio 2.3.2 ... ciągle się zawieszał. Działa dobrze w trybie uruchamiania. Włączyłem Log.d () zaraz po onCreate ... i to rozwiązało problem! Domyśl!

IrvineCAGuy
źródło
0

Usuń wszystkie punkty debugowania w mojej aplikacji działa dobrze, możesz użyć kombinacji klawiszy Ctrl + Shift + F6, aby usunąć wszystkie punkty debugowania

Arun Prajapati
źródło