Aplikasi Android lumpuh saat diluncurkan dalam mode debug

290

Ketika saya menjalankan dalam mode debug aplikasi macet, tetapi ketika saya hanya menjalankannya biasanya berfungsi. Saya pikir masalah terjadi ketika debugger terpasang.

Catatan:

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
sumber
Saya tidak tahu apa yang terjadi, tetapi sekarang kerjakan. Sihir!!!
Maxim Rabtsun
Saya mengalami masalah yang sama dan itu BS lengkap. Bahkan me-restart emulator tidak membantu. Setelah menghapus banyak kode dan kemudian membacanya dalam satu blok sekaligus, saya kembali ke kode asli dan masalahnya hilang. Saya merasa objek kelas hanya perlu dibangun kembali. Kompilasi salah. Saya kira proyek "bersih" mungkin akan memperbaikinya.
Dakusan
Hampir 3 tahun kemudian, bug ini masih ada.
Attila Tanyi

Jawaban:

321

Bagi saya, itu terjadi ketika saya memiliki breakpoint dalam fungsi bersarang. Dalam kasus saya, itu ada di dalam Runnable.run() {}. Tidak yakin apakah itu terjadi pada fungsi bersarang lainnya.

Contoh:

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

Jika ada breakpoint pada baris apa pun di dalam run () func, itu crash dengan kesalahan A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread.

Kesalahan ini terjadi saat kelas pertama kali ditemui, BUKAN ketika breakpoint terkena. Jadi itu terjadi pada saya ketika saya melangkah ke baris yang memiliki new TouchEvent();, sebelum kode TouchEvent dijalankan (sebelum konstruktor).

Solusinya adalah menghapus break point (dan meletakkannya di tempat lain).

Edit:

Lupa menyebutkan, tampaknya terkait dengan API25, tetapi telah dilaporkan untuk API26 dan API27 juga.

Edit:

Solusi lain adalah menonaktifkan Run Instan , tapi tolong berikan kredit @ toobsco42 untuk itu di bawah ini.

Dakusan
sumber
28
Ini telah dilaporkan pada code.google.com dan saya sedang berusaha memperbaikinya di sana. code.google.com/p/android/issues/detail?id=227513
Dakusan
4
Saya memiliki SDK 23 dan membangun alat 25.0.1 - masalah yang sama. Menghapus breakpoint memperbaiki ini.
Bonton255
2
Anda juga dapat menghapus breakpoint, tekan Debug, lalu setelah aplikasi berjalan OK, tambahkan kembali ke tempat yang Anda inginkan. Kalau begitu berfungsi, ingat untuk menghapusnya sebelum memulai ulang.
cometfish
3
Saya beralih emulator dan masalah hilang - beralih kembali ke emulator asli dan masalah kembali. Setelah masalah muncul, satu-satunya cara untuk mengatasinya (selain membersihkan semua breakpoint - tidak, terima kasih) adalah menonaktifkan Instant Run. Mengaktifkan Kembali Menjalankan Instan pada emulator masalah mengembalikan masalah.
Andy
11
Masalahnya adalah campuran breakpoints di utas lainnya di 7.1.1 dengan menjalankan instan. Jadi ubah salah satu dari 3 di atas dan itu akan berhenti menabrak.
Warpzit
187

Dalam kasus saya, saya harus menonaktifkan Instant Run. Sepertinya Instant Run memiliki segala macam efek samping dan ini bisa menjadi salah satunya.

toobsco42
sumber
47
Catatan, di Android Studio, ada di bawah File -> Settings -> Build, Execution, Deployment -> Run Instan.
shortstuffsushi
Itu juga kasus saya! Terima kasih: D
francisco_ssb
9
Itu satu jam dalam hidup saya, saya tidak akan pernah melihat lagi
Gary Bak
3
Bekerja pada banyak mesin, dengan Google terus-menerus menerapkan kembali menjalankan instan, saya membutuhkannya untuk membuat saya kira-kira 4216% lebih efisien ketika akhirnya bekerja jauh dari jarak dekat untuk mendapatkan waktu saya yang hilang kembali.
Anthony
terima kasih banyak. harus dicentang sebagai jawaban;) fitur jelek ini memberi Anda lima sen dan menghabiskan seratus dolar :))
Amir Ziarati
50

Masalahnya terkait dengan Android versi 7.x, saya menghapus semua breakpoints dalam fungsi bersarang dan itu berhasil, diuji dengan Android versi 6.0 juga, dan itu bekerja tanpa masalah.

Menurut tanggapan tim pengembang google, itu diperbaiki pada 12/1/2016 dan akan diterapkan pada rilis berikutnya.

hcknl
sumber
mencoba semua yang mungkin, komentar di atas membantu! Terima kasih banyak!
Stepan Maksymov
Berhasil, jawaban ini harus diterima. Terima kasih! Anda juga dapat menghapus Instant Run sebagai solusi lain
Özer Özcan
Akan lebih baik jika tautan dilampirkan untuk mendukung ini;) "Menurut tanggapan tim pengembang google, itu diperbaiki pada 12/1/2016 dan akan diterapkan pada rilis berikutnya."
jabu.hlong
Mungkin merupakan respons email, masih mendapatkan bug ini hari ini dan harus menghapus breakpoints
Jim Factor
Android 7.1.1 masih merupakan versi Android yang berjalan di Pixelbook. Saya mendapatkan ini sepanjang waktu berkembang di Android Studio di Pixelbook!
Jeff Lockhart
21

Saya menghapus semua breakpoint dan berhasil, diuji dengan Emulator Pixel API 25.

Untuk menghapus semua breakpoints:

  • Pergi ke opsi Debugger.

  • Klik ikon merah yang ada di bawah ini untuk menghentikan debug.

  • Anda akan melihat jendela di sana Anda dapat menghapus semua breakpoints.

Lihat selengkapnya di pos ini: https://stackoverflow.com/a/42478994/5749462

creonilso rodrigues
sumber
16

Ini karena beberapa masalah dengan titik debug. Hapus semua titik debug dan kemudian akan berfungsi.

nyala3
sumber
3
Anda dapat menggunakan pintasan CTRL + SHIFT + F8 untuk menghapus tanda semua breakpoint dengan mudah.
brunoramonalmeida
Pintasan ini tidak berfungsi sepanjang waktu tergantung pengaturan OS dan keyboard Anda
flame3
8

Benar-benar aneh, saya menonaktifkan Instant Run dan masalahnya teratasi sendiri.

mbpakalin
sumber
Ya, jalankan instan di perangkat di bawah Android 7.0 dapat menyebabkan masalah ini cukup mudah
egorikem
4

Masalah saya adalah bahwa saya memiliki breakpoint pada pernyataan impor

egorikem
sumber
Dan bertemu dengan ini untuk ketiga kalinya ... Pada dasarnya, setiap breakpoint kadang-kadang dapat menyebabkan ini, sehingga solusinya mungkin hanya dengan menghapus semua / breakpoint terbaru
egorikem
3

masukkan deskripsi gambar di sini

Di jendela 5: Debug, Gunakan tombol "Lihat Breakpoints"

masukkan deskripsi gambar di sini

Batalkan Pilih Semua dari mereka

masukkan deskripsi gambar di sini

Nicoolasens
sumber
1

Solusi paling sederhana adalah mencoba menemukan perangkat lain atau emulator (terima kasih AVD Manager kami punya pilihan) yang akan berfungsi sebagai daya tarik tanpa solusi

yoAlex5
sumber
1

Aplikasi saya juga macet hanya saat dalam mode debug. Sedangkan untuk versi 3.5 - "Instant Run" diganti dengan "Apply Changes", jadi saya tidak bisa menonaktifkannya. Solusi saya adalah meluncurkan aplikasi secara normal (dengan panah hijau), navigasikan tepat setelah tempat itu dulu macet dan kemudian lampirkan debugger ke dalamnya:
masukkan deskripsi gambar di sini

TDG
sumber
0

Menghapus breakpoint dari Runable.run () memecahkan masalah bagi saya. Saya bisa menggunakan breakpoints saat runtime di dalam Runable.run (). Tetapi tidak pada waktu kompilasi

Ankush
sumber
0

Berlari ke masalah yang sama ini tetapi breakpoint saya adalah baris pertama dalam fungsi bersarang jadi bagaimana cara memindahkannya ke tempat lain?

Saya membuat metode pribadi sementara dan membuat doa metode itu hal pertama dalam fungsi dan kemudian saya menetapkan breakpoint dalam metode itu.

Ketika saya selesai men-debug saya menghapus metode dan permohonannya.

Bartonstanley
sumber
0

ini adalah kesempatan yang panjang tetapi bagi saya, ketika saya memiliki pernyataan impor yang tidak digunakan, dan impor itu memiliki kode yang menjalankan panggilan jaringan, itu macet untuk saya tetapi ketika menghapusnya, kode tersebut dapat melakukan debug secara normal.

Reidisaki
sumber
0

Mulai mogok hanya saat memulai dengan debugger. Restart Android Studio 2.3.2 ... terus macet. Berjalan dengan baik dalam mode Jalankan. Saya memasukkan Log.d () tepat setelah onCreate ... dan itu menyelesaikan masalahnya! Sosok pergi!

IrvineCAGuy
sumber
0

Hapus Semua titik debug pada aplikasi saya berfungsi dengan baik Anda dapat menggunakan ctrl + shift + f6 untuk menghapus semua titik debug

Arun Prajapati
sumber