O aplicativo Android falha quando iniciado no modo de depuração


290

Quando executo no modo de depuração , o aplicativo falha, mas quando apenas o executo normalmente, ele funciona. Eu acho que o problema acontece quando o depurador está anexado.

Registro:

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

Não sei o que aconteceu, mas agora trabalhe. Magia!!!
Maxim Rabtsun

Corri para o mesmo problema e foi BS completo. Mesmo reiniciar o emulador não ajudou. Após remover um monte de código e depois lê-lo em um bloco de cada vez, voltei ao código original e o problema desapareceu. Sinto que o objeto de classe só precisava ser reconstruído. Uma compilação deu errado. Eu estou supondo que um projeto "limpo" provavelmente o consertaria.
Dakusan

Quase 3 anos depois, esse bug ainda está presente.
Attila Tanyi 25/10/19

Respostas:


321

Para mim, ocorreu quando eu tenho um ponto de interrupção em uma função aninhada. No meu caso, estava dentro Runnable.run() {}. Não tenho certeza se isso acontece em outras funções aninhadas.

Exemplo:

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

Se houver um ponto de interrupção em qualquer linha dentro da função run (), ele trava com o erro A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread.

Este erro ocorre na primeira vez que a classe é encontrada, NÃO quando o ponto de interrupção é atingido. Assim, ocorreu-me quando entrei em uma linha que havia new TouchEvent();antes de qualquer código do TouchEvent ser executado (antes do construtor).

A solução é remover o ponto de interrupção (e colocá-lo em outro lugar).

Editar:

Esqueci de mencionar, ele parece estar vinculado à API25, mas também foi relatado para API26 e API27.

Editar:

Outra solução é desabilitar o Instant Run , mas dê o crédito @ toobsco42 para isso abaixo.


28
Isso foi relatado no code.google.com e estou trabalhando para corrigi-lo lá. code.google.com/p/android/issues/detail?id=227513
Atualizado em 18/11/16

4
Tenho SDK 23 e construir ferramentas 25.0.1 - mesmo problema. A remoção dos pontos de interrupção corrige isso.
precisa saber é o seguinte

2
Você também pode remover o ponto de interrupção, pressionar Depurar e, depois que o aplicativo estiver executando OK, adicione-o novamente ao local desejado. Funciona bem então, lembre-se de removê-lo antes de reiniciar.
Cometafish

3
Troquei emuladores e o problema desapareceu - retornei ao emulador original e o problema voltou. Quando o problema aparece, a única maneira de superá-lo (além de limpar todos os pontos de interrupção - não, obrigado) é desativar a Execução Instantânea. A reativação do Instant Run no emulador de problemas traz o problema de volta.
Andy

11
O problema é uma mistura de pontos de interrupção em outros threads no 7.1.1 com execução instantânea. Altere qualquer um dos 3 acima e ele irá parar de funcionar.
Warpzit

187

No meu caso, tive que desativar o Instant Run. Parece que o Instant Run tem todos os tipos de efeitos colaterais e este pode ser um deles.


47
Observe que, no Android Studio, ele está em Arquivo -> Configurações -> Compilação, Execução, Implantação -> Execução Instantânea.
Shortstuffsushi #

Foi o meu caso também! Obrigado: D
francisco_ssb

9
Essa foi uma hora da minha vida que nunca mais voltarei a ver
Gary Bak

3
Trabalhando em várias máquinas, com o Google constantemente reaplicando a execução instantânea, eu precisaria dele para me tornar 4216% mais eficiente quando finalmente trabalha para remotamente chegar perto de recuperar meu tempo perdido.
Anthony

muito obrigado. deve ser assinalada como resposta;) este recurso feio dá uma uma de cinco centavos e resíduos cem dólares :))
Amir Ziarati

50

O problema está relacionado à versão 7.x do Android, removi todos os pontos de interrupção nas funções aninhadas e funcionou, testado também com a versão 6.0 do Android e está funcionando sem problemas.

De acordo com a resposta da equipe de desenvolvedores do Google, foi corrigido em 1/12/2016 e será aplicado na próxima versão.


tentei tudo possível, o comentário acima ajudou! Muito obrigado!
Stepan Maksymov

Funcionou, essa resposta deve ser aceita. Obrigado ! Além disso, você pode remover o Instant Run como outra solução
Özer Özcan

Seria bom se um link fosse anexado para suportar isso;) "De acordo com a resposta da equipe de desenvolvedores do Google, foi corrigido em 1/12/2016 e será aplicado na próxima versão."
Jabu.hlong

Provavelmente foi uma resposta por e-mail, ainda recebendo esse bug hoje e precisando remover pontos de interrupção #
Jim Factor

O Android 7.1.1 ainda é a versão do Android em execução no Pixelbook. Eu entendo isso o tempo todo desenvolvendo no Android Studio no Pixelbook!
Jeff Lockhart

21

Eu removi todos os pontos de interrupção e funcionou, testado com a API Emulator Pixel 25.

Para remover todos os pontos de interrupção:

  • Vá para a opção Depurador.

  • Clique no ícone vermelho abaixo para parar a depuração.

  • Você verá uma janela onde poderá remover todos os pontos de interrupção.

Veja mais neste post: https://stackoverflow.com/a/42478994/5749462


16

Isso ocorre devido a algum problema com os pontos de depuração. Remova todos os pontos de depuração e, em seguida, deve funcionar.


3
Você pode usar o atalho CTRL + SHIFT + F8 para desmarcar todos os pontos de interrupção facilmente.
Brunoramonalmeida # 6/18

Este atalho não funciona o tempo todo, dependendo o seu sistema operacional e teclado configurações
Flame3

8

É realmente estranho, desabilitei o Instant Run e o problema se resolveu.


Sim, instant rodar em dispositivos abaixo Android 7.0 pode causar este problema com bastante facilidade
egorikem

4

Meu problema foi que eu tinha um ponto de interrupção na declaração de importação


E correu para este para como terceira vez ... Basicamente, qualquer ponto de interrupção, por vezes, pode causar isso, portanto, a solução pode ser apenas para remover todos os pontos de interrupção / recentes
egorikem

3

insira a descrição da imagem aqui

Na janela 5: Depuração, use o botão "Exibir pontos de interrupção"

insira a descrição da imagem aqui

UnSelectAll deles

insira a descrição da imagem aqui


1

A solução mais simples é tentar encontrar outro dispositivo ou emulador (graças ao AVD Manager, temos uma opção) que funcionará como um encanto sem soluções alternativas


1

Meu aplicativo também travou apenas no modo de depuração. Quanto à versão 3.5 - "Instant Run" foi substituído por "Apply Changes", então não pude desativá-lo. Minha solução foi iniciar o aplicativo normalmente (com a seta verde), navegar logo após o local em que ele travava e anexar o depurador a ele:
insira a descrição da imagem aqui


0

A remoção do ponto de interrupção do Runable.run () resolveu o problema para mim. Consegui usar pontos de interrupção em tempo de execução dentro de Runable.run (). Mas não em tempo de compilação


0

Encontrei esse mesmo problema, mas meu ponto de interrupção foi a primeira linha na função aninhada. Como movê-lo para outro lugar?

Criei um método privado temporário e fiz uma invocação desse método a primeira coisa na função e, em seguida, defini o ponto de interrupção nesse método.

Quando terminei a depuração, removi o método e sua invocação.


0

é um tiro no escuro, mas para mim, quando tenho uma instrução de importação que não está sendo usada e que possui código que executa chamadas de rede, ela travou para mim, mas ao removê-la, o código pôde depurar normalmente.


0

Começando a falhar apenas ao iniciar com o depurador. Reiniciado o Android Studio 2.3.2 ... continuava travando. Executa bem no modo de execução. Coloquei um Log.d () logo após o onCreate ... e isso resolveu o problema! Vai saber!


0

Excluir Todos os pontos de depuração no meu aplicativo funciona bem. Você pode usar ctrl + shift + f6 para remover todos os pontos de depuração

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.