При запуске приложения в режиме отладки приложение Android
Когда я запускаю режим отладки, приложение вылетает, но когда я его запускаю нормально, он работает.
Я думаю, что проблема возникает, когда отладчик подключен.
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
Ответы
Ответ 1
Для меня это произошло, когда у меня есть точка останова во вложенной функции. В моем случае это было в Runnable.run() {}
. Не уверен, что это происходит в других вложенных функциях.
Пример:
public class TouchEvent {
public boolean HandleEvent(MotionEvent Event) {
new Runnable() { @Override public void run() {
int i=5;
i++;
}};
}
}
Если в какой-либо строке внутри функции run() есть точка останова, она завершается с ошибкой A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread
.
Эта ошибка возникает при первом обнаружении класса, а НЕ при достижении точки останова. Так что это произошло со мной, когда я вошел в строку с new TouchEvent();
, до того, как какой-либо код TouchEvent был запущен (до конструктора).
Решение состоит в том, чтобы удалить точку останова (и поместить ее в другое место).
Изменить:
Забыл упомянуть, похоже, что он связан с API25, но также сообщается о API26 и API27.
Изменить:
Другое решение - отключить Мгновенный запуск, но, пожалуйста, предоставьте @toobsco42 информацию об этом ниже.
Ответ 2
В моем случае мне пришлось отключить Instant Run. Кажется, что Instant Run имеет всевозможные побочные эффекты, и это может быть один из них.
Ответ 3
Проблема связана с Android версии 7.x, я удалил все точки останова в вложенных функциях, и он работал, протестирован и с Android версии 6.0, и он работает без проблем.
Согласно ответу команды разработчиков Google, он был исправлен 12/1/2016 и будет применен в следующей версии.
Ответ 4
Я удалил все точки останова, и он работал, протестирован с эмулятором Pixel API 25.
Чтобы удалить все точки останова:
-
Перейдите к опции Debugger.
-
Нажмите красную иконку, которая ниже, чтобы остановить отладку.
-
Вы увидите окно, в котором вы можете удалить все точки останова.
Подробнее в этом сообщении: fooobar.com/questions/37869/...
Ответ 5
Это связано с некоторой проблемой с точками отладки. Удалите все точки отладки, а затем он должен работать.
Ответ 6
Это действительно странно, я отключил Instant Run, и проблема решена сама собой.
Ответ 7
Моя проблема заключалась в том, что у меня была точка останова в инструкции import
Ответ 8
![enter image description here]()
В окне 5: Отладка, используйте кнопку "Просмотреть точки останова"
![enter image description here]()
UnSelectAll из них
![enter image description here]()
Ответ 9
Самое простое решение - найти другое устройство или эмулятор (спасибо AVD Manager у нас есть выбор), который будет работать как прелесть без обходных решений
Ответ 10
Удаление точки останова из Runable.run() решило проблему для меня. Я смог использовать точки останова во время выполнения внутри Runable.run(). Но не во время компиляции
Ответ 11
В этой же проблеме возникла ошибка, но моя точка останова была первой строкой вложенной функции, поэтому как ее переместить в другое место?
Я создал временный частный метод и сделал вызов этого метода первым делом в функции, а затем я установил точку останова в этом методе.
Когда я закончил отладку, я удалил метод и его вызов.
Ответ 12
Это длинный снимок, но для меня, когда у меня есть оператор импорта, который не используется, и что у импорта есть код, который запускает сетевые вызовы, он разбился для меня, но при его удалении код смог отладить как обычно.
Ответ 13
Запуск сбоя только при запуске с отладчиком. Перезагруженный Android Studio 2.3.2... продолжал сбой. Хорошо работает в режиме запуска. Я ввел Log.d() сразу после onCreate... и он прояснил проблему! Пойдите фигурой!
Ответ 14
Удалить все точки отладки на моем приложении работает нормально
Вы можете использовать Ctrl + Shift + F6, чтобы удалить все точки отладки
Ответ 15
Мое приложение также зависало только в режиме отладки. Что касается версии 3.5 - "Instant Run" был заменен на "Apply Changes", поэтому я не смог его отключить. Мое решение состояло в том, чтобы запустить приложение в обычном режиме (с зеленой стрелкой), перейти сразу после места, в котором оно аварийно завершилось, и затем присоединить к нему отладчик:
![enter image description here]()