Приложение Android вылетает при запуске в режиме отладки

290

Когда я запускаю в режиме отладки, приложение вылетает, но когда я просто запускаю его нормально, оно работает. Я думаю, что проблема возникает, когда отладчик подключен.

Журнал:

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
Максим Рабцун
источник
Я не знаю, что случилось, но сейчас это работает. Волшебство !!!
Максим Рабцун
Я столкнулся с той же проблемой, и это был полный BS. Даже перезапуск эмулятора не помог. Удалив кучу кода и затем прочитав его по одному блоку за раз, я вернулся к исходному коду, и проблема исчезла. У меня ощущение, что объект класса просто необходимо восстановить. Компиляция пошла не так. Я предполагаю, что проект "чистый", вероятно, исправил бы это.
Дакусан
Почти 3 года спустя эта ошибка все еще присутствует.
Аттила

Ответы:

321

Для меня это произошло, когда у меня есть точка останова во вложенной функции. В моем случае это было внутри 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.

Редактировать:

Другим решением является отключение Instant Run , но, пожалуйста, помните @ toobsco42 об этом ниже.

Dakusan
источник
28
Об этом сообщается на code.google.com, и я работаю над тем, чтобы исправить его там. code.google.com/p/android/issues/detail?id=227513
Дакусан
4
У меня SDK 23 и инструменты сборки 25.0.1 - та же проблема. Удаление точек останова исправляет это.
Bonton255
2
Вы также можете удалить точку останова, нажать «Отладка», а затем, когда приложение запустится, «ОК», добавить его обратно в нужное место. Работает нормально тогда, просто не забудьте удалить его перед перезапуском.
комета
3
Я переключил эмуляторы и проблема ушла - переключился обратно на оригинальный эмулятор и проблема вернулась. Как только проблема появляется, единственным способом ее преодоления (помимо очистки всех точек останова - нет, спасибо) является отключение Instant Run. Повторное включение Instant Run на эмуляторе проблемы возвращает проблему.
Энди
11
Проблема заключается в сочетании точек останова в других потоках на 7.1.1 с мгновенным включением. Так что измените любой из вышеперечисленных 3, и он перестанет падать.
Warpzit
187

В моем случае мне пришлось отключить Instant Run. Кажется, что Instant Run имеет все виды побочных эффектов, и это может быть одним из них.

toobsco42
источник
47
Обратите внимание, что в Android Studio они находятся в меню Файл -> Настройки -> Сборка, выполнение, развертывание -> Мгновенный запуск.
shortstuffsushi
Это был и мой случай! Спасибо: D
francisco_ssb
9
Это был час моей жизни, которого я больше никогда не увижу
Гари Бак,
3
Работая на нескольких машинах, так как Google постоянно применяет мгновенный запуск, мне нужно, чтобы он был примерно на 4216% более эффективным, когда он, наконец, работает, чтобы приблизиться к удалению моего потерянного времени.
Энтони,
спасибо, черт побери. должен быть отмечен как ответ;) эта уродливая особенность дает вам пять центов и тратит
впустую
50

Проблема связана с версией Android 7.x, я удалил все точки останова во вложенных функциях, и это сработало, протестировано и с версией Android 6.0, и работает без проблем.

Согласно ответу команды разработчиков Google, он был исправлен 01.12.2016 и будет применен в следующем выпуске.

hcknl
источник
перепробовал все возможное, выше помог комментарий! большое спасибо!
Степан Максимов
Сработало, на это должен быть принят ответ. Спасибо ! Также вы можете удалить Instant Run в качестве другого решения
Özer Özcan
Было бы неплохо, если бы была прикреплена ссылка для поддержки этого;) "Согласно ответу команды разработчиков Google, это было исправлено 01.12.2016 и будет применяться в следующем выпуске".
jabu.hlong
Вероятно, был ответ по электронной почте, все еще получая эту ошибку сегодня и должен был удалить точки останова
Джим Фактор
Android 7.1.1 по-прежнему является версией Android, работающей на Pixelbook. Я все это время развиваю в Android Studio на Pixelbook!
Джефф Локхарт
21

Я удалил все точки останова, и это сработало, протестировано с помощью Emulator Pixel API 25.

Чтобы удалить все точки останова:

  • Перейти к опции отладчика.

  • Нажмите на красный значок, который находится ниже, чтобы остановить отладку.

  • Вы увидите окно, где вы можете удалить все точки останова.

Подробнее в этом посте: https://stackoverflow.com/a/42478994/5749462

Creonilso Rodrigues
источник
16

Это связано с некоторой проблемой с точками отладки. Удалите все точки отладки, и тогда это должно работать.

flame3
источник
3
Вы можете использовать сочетание клавиш CTRL + SHIFT + F8, чтобы легко снять отметки со всех точек останова.
brunoramonalmeida
Этот ярлык не работает постоянно, в зависимости от вашей ОС и настроек клавиатуры
flame3
8

Это действительно странно, я отключил Instant Run, и проблема решилась сама собой.

mbpakalin
источник
Да, мгновенный запуск на устройствах ниже Android 7.0 может легко вызвать эту проблему
egorikem
4

Моя проблема заключалась в том, что у меня была точка останова в операторе импорта

egorikem
источник
И столкнулся с этим как в третий раз ... В принципе, любая точка останова иногда может вызывать это, поэтому решение может быть просто удалить все / последние точки останова
egorikem
3

введите описание изображения здесь

В окне 5: отладка используйте кнопку «Просмотр точек останова»

введите описание изображения здесь

Отменить выбор всех из них

введите описание изображения здесь

Nicoolasens
источник
1

Самое простое решение - попытаться найти другое устройство или эмулятор (благодаря AVD Manager, у нас есть выбор), который будет работать без проблем.

yoAlex5
источник
1

Мое приложение также зависало только в режиме отладки. Что касается версии 3.5 - «Instant Run» был заменен на «Apply Changes», поэтому я не смог его отключить. Мое решение состояло в том, чтобы запустить приложение в обычном режиме (с зеленой стрелкой), перейти сразу после места, в котором оно аварийно завершилось, и затем присоединить к нему отладчик:
введите описание изображения здесь

TDG
источник
0

Удаление точки останова из Runable.run () решило проблему для меня. Я смог использовать точки останова во время выполнения внутри Runable.run (). Но не во время компиляции

Ankush
источник
0

Столкнулся с этой же проблемой, но моя точка останова была первой строкой во вложенной функции, так как переместить ее в другое место?

Я создал временный закрытый метод и первым делом вызвал вызов этого метода, а затем установил точку останова в этом методе.

Когда я закончил отладку, я удалил метод и его вызов.

bartonstanley
источник
0

это долгий путь, но для меня, когда у меня есть оператор import, который не используется, и в этом импорте есть код, который выполняет сетевые вызовы, он завис для меня, но при его удалении код смог нормально отлаживаться.

reidisaki
источник
0

Запуск сбой только при запуске с отладчиком. Перезапустил Android Studio 2.3.2 ... продолжал падать. Работает нормально в режиме Run. Я положил в Log.d () сразу после onCreate ... и это решило проблему! Пойди разберись!

IrvineCAGuy
источник
0

Удалить все точки отладки в моем приложении работает нормально, вы можете использовать Ctrl + Shift + F6, чтобы удалить все точки отладки

Арун Праджапати
источник