Estou desenvolvendo um aplicativo e, sempre que o executo, recebo a mensagem:
Infelizmente, o MyApp parou.
O que posso fazer para resolver isso?
Sobre esta pergunta - obviamente inspirada em O que é um rastreamento de pilha e como posso usá-lo para depurar os erros de meu aplicativo? , há muitas perguntas informando que o aplicativo falhou, sem mais detalhes. Esta pergunta tem como objetivo instruir os programadores iniciantes do Android sobre como tentar resolver seus próprios problemas ou fazer as perguntas certas.
Respostas:
Esta resposta descreve o processo de recuperação do rastreamento de pilha. Já tem o rastreamento de pilha? Leia os rastreamentos de pilha em " O que é um rastreamento de pilha e como posso usá-lo para depurar os erros do meu aplicativo? "
O problema
Seu aplicativo foi encerrado porque um não capturado
RuntimeException
foi lançado.O mais comum deles é o
NullPointerException
.Como resolver isso?
Sempre que um aplicativo Android falha (ou qualquer aplicativo Java), a
Stack trace
é gravado no console (neste caso, logcat). Esse rastreamento de pilha contém informações vitais para resolver seu problema.Android Studio
Na barra inferior da janela, clique no
Logcat
botão Como alternativa, você pode pressionar alt+ 6. Verifique se o seu emulador ou dispositivo está selecionado noDevices
painel. Em seguida, tente encontrar o rastreamento de pilha, mostrado em vermelho. Pode haver muitas coisas registradas no logcat, portanto, você pode precisar rolar um pouco. Uma maneira fácil de encontrar o rastreamento de pilha é limpar o logcat (usando a lixeira à direita) e deixar o aplicativo travar novamente.Eu encontrei o rastreamento de pilha, e agora?
Yay! Você está no meio do caminho para resolver seu problema.
Você só precisa descobrir o que exatamente fez o seu aplicativo travar, analisando o rastreamento da pilha.
Leia os rastreamentos de pilha em " O que é um rastreamento de pilha e como posso usá-lo para depurar os erros de meu aplicativo? "
Ainda não consigo resolver meu problema!
Se você encontrou sua
Exception
e a linha onde ocorreu, e ainda não consegue descobrir como corrigi-la, não hesite em fazer uma pergunta no StackOverflow.Tente ser o mais conciso possível: publique o rastreamento da pilha e o código relevante (por exemplo, algumas linhas até a linha que lançou o
Exception
).fonte
Android > Devices|Logcat
e adicionar um novo filtro ( i.imgur.com/145dtkx.png ) e filtrá-loby Log Message
aqui. Você pode colocarFATAL EXCEPTION
( i.imgur.com/HpELhaU .png ), portanto, nesta caixa, você pode ler tudo oExceptions
que é lançado pelo seu aplicativo. Com isso, você não precisa limpar o logcat e executar a falha novamente. Eu acho que o Android Studio também tem essa opção.Você pode usar ferramenta ADB do Google para obter
Logcat file
para analisar a questão.abra o
logcat.txt
arquivo e procure o nome do seu aplicativo. Deve haver informações sobre o motivo da falha, o número da linha, o nome da classe etc.fonte
-d
, caso contrário, você deve pressionar Ctrl-C para sair do logcat. Eu façoadb logcat -v time -d > filename.txt
Primeiro, verifique em qual ponto seu aplicativo travou (
Unfortunately, MyApp has stopped.
). Para isso, você pode usarLog.e("TAG", "Message");
, usando esta linha, você pode ver o log do seu aplicativo no logcat.Depois disso, você descobrirá em que ponto seu aplicativo parou e é muito fácil resolver ao seu lado.
fonte
Basta verificar o erro no log cat.
Você obtém a opção de log cat no eclipse:
O gato de log contém erro.
Caso contrário, você também pode verificar o erro executando um aplicativo no modo de depuração. Em primeiro lugar, defina o ponto de interrupção depois disso, fazendo:
fonte
Nota: Esta resposta está usando o Android Studio 2.2.2
Nota 2: Estou considerando que seu dispositivo foi conectado com sucesso.
A primeira coisa que você faz quando seu aplicativo trava é procurar o LogCat, na parte inferior do Android Studio há uma barra de ferramentas com uma lista de menus:
Clique no "Android Monitor" (o que sublinhei na imagem acima. ^)
Agora, você terá algo parecido com isto:
Altere "
Verbose
" para "Error
" Agora, ele mostrará apenas erros registrados. Não se preocupe com todos esses erros (se você os tiver) agora.Está bem. Agora, faça o que você fez para travar seu aplicativo. Depois que o aplicativo falhar, vá para o seu logcat. Você deve encontrar um novo log de falha que possui muito
at:x.x.x
: eCaused by: TrumpIsPresidentException
por exemplo. Vá para essaCaused by:
instrução no seu logcat.Além disso
Caused By:
, deve haver a exceção que aconteceu. No meu caso, é umRuntimeException
e abaixo dele deve haver uma linha que contém um link azul como:Se isso
Caused by:
NÃO tiver uma linha com um texto azul em algum lugar, procure outraCaused by:
que tenha.Clique no link azul . Deve levá-lo para onde o problema ocorreu. No meu caso, foi devido a esta linha:
Então, agora eu sei por que está falhando. É porque eu mesma estou lançando a exceção. Este foi um erro óbvio .
No entanto, digamos que recebi outro erro:
Eu verifiquei meu logcat, cliquei no link azul que ele me dava e me levou aqui:
Então, agora eu quero depurar. De acordo com esta pergunta StackOverflow , um NullPointerException diz que algo é
null
.Então, vamos descobrir o que é nulo . Existem duas possibilidades. Ou
mTextView
é nulo oumyString
é nulo. Para descobrir, antes damTextView.setText(mString)
linha, adiciono estas duas linhas:Agora, como fizemos anteriormente (alteramos Verose para erro), queremos alterar "Erro" para "Depuração". Como estamos registrando por depuração. Aqui estão todos os métodos de log:
Então, desde que usamos
Log.d
, estamos verificando o Debug. Foi por isso que a alteramos para depuração.O aviso
Log.d
tem um primeiro parâmetro, no nosso caso "AppDebug". Clique no menu suspenso "Sem filtros" no canto superior direito do logcat. Selecione "Editar configuração do filtro", atribua um nome ao seu filtro e, em "Tag de log", coloque "App Debug". Clique OK". Agora, você deve ver duas linhas no logcat:Então agora sabemos que o mTextView é nulo.
Eu observo meu código, agora percebo algo.
eu tenho
private TextView mTextView
declarei no topo da minha classe. Mas não estou definindo isso.Basicamente, eu esqueci de fazer isso no meu onCreate ():
É por isso que
mTextView
é nulo, porque eu esqueci de dizer ao meu aplicativo o que é. Então, adiciono essa linha, executo meu aplicativo e agora o aplicativo não falha.fonte
Este pop-up é exibido apenas quando você recebe uma exceção fatal no seu código que interrompe a execução do aplicativo. Pode ser qualquer exceção
NullPointerException
,OutOfMemoryException
etc.A melhor maneira de verificar é através do Logcat se você ainda estiver desenvolvendo o aplicativo no Android studio, que é uma maneira rápida de ler o rastreamento de pilha e verificar a causa do aplicativo.
Se seu aplicativo já estiver ativo, você não poderá usar logcat . Portanto, você pode implementar
Crashlytics
para fornecer relatórios de erros de qualquer exceção que ocorra.fonte
Verifique sua
Logcat
mensagem e veja seuManifest
arquivo. Falta algo como definir aActivity,
permissão do usuário, etc.fonte
Você pode usar qualquer uma destas ferramentas:
Sugiro usar o Android Debug Monitor , é bom. Porque o eclipse trava quando há muitos logs, e através do filtro adb logcat e tudo difícil.
fonte
Você tem que verificar o
Stack trace
Como fazer isso?
no seu IDE Verifique as janelas do formulário LOGCAT
Se você não conseguir ver as janelas do logcat, vá para esse caminho e abra-o
se você estiver usando o Google-Api, vá para este caminho
adb logcat> logcat.txt
fonte
No método showToast () abaixo, você precisa passar outro parâmetro para o contexto ou contexto do aplicativo, fazendo isso.
fonte
Deixe-me compartilhar uma análise básica do Logcat para quando você encontrar um fechamento forçado (quando o aplicativo parar de funcionar).
DOCS
A ferramenta básica do Android para coletar / analisar logs é o logcat.
AQUI é a página do Android sobre logcat
Se você usa o Android Studio, também pode verificar este LINK .
Capturando
Basicamente, você pode capturar manualmente o logcat com o seguinte comando (ou apenas verificar a janela AndroidMonitor no AndroidStudio):
Há muitos parâmetros que você pode adicionar ao comando que ajuda a filtrar e exibir a mensagem que você deseja ... Isso é pessoal ... Eu sempre uso o comando abaixo para obter o carimbo de data / hora da mensagem:
Você pode redirecionar a saída para um arquivo e analisá-la em um editor de texto.
Analisando
Se seu aplicativo estiver travando, você terá algo como:
Esta parte do log mostra muitas informações:
07-09 08:29:13.475
É importante verificar quando o problema ocorreu ... Você pode encontrar vários erros em um log ... você deve ter certeza de que está verificando as mensagens adequadas :)
com.example.khan.abc
Dessa forma, você sabe qual aplicativo travou (para verificar se você está verificando os logs da sua mensagem)
java.lang.NullPointerException
Um erro de exceção do ponteiro nulo
Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
Você tentou chamar o método
onBackPressed()
de umFragmentActivity
objeto. No entanto, esse objeto foinull
quando você o fez.Rastreamento de pilha: Rastreamento de pilha mostra a ordem de chamada do método ... Às vezes, o erro ocorre no método de chamada (e não no método chamado).
em com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)
Ocorreu um erro no arquivo
com.example.khan.abc.AudioFragment.java
, dentro doonClick()
método na linha:125
(stacktrace mostra a linha em que o erro ocorreu)Foi chamado por:
Qual foi chamado por:
que foi chamado por:
etc ....
Visão geral
Esta foi apenas uma visão geral ... Nem todos os logs são simples, etc. É apenas para compartilhar a ideia e fornecer informações básicas para você ...
Espero poder ajudá-lo de alguma forma ... Atenciosamente
fonte
Use o LogCat e tente encontrar o que está causando o travamento do aplicativo.
Para ver o Logcat se você usa o Android Studio , pressione ALT + 6 ou
se você usar o Eclipse, então Janela -> Perspectiva aberta -> Outro - LogCat
Vá para o LogCat, no menu suspenso, selecione erro. Isso conterá todas as informações necessárias para ajudá-lo a depurar. Se isso não ajudar, publique o LogCat como uma edição da sua pergunta e alguém o ajudará.
fonte
Se o seu aplicativo, por algum motivo, travar sem um bom rastreamento de pilha. Tente depurá-lo da primeira linha e siga linha por linha até travar. Então você terá a resposta, qual linha está causando problemas. Provavelmente, você pode envolvê-lo em tentar pegar o bloco e imprimir a saída de erro.
fonte
Você também pode receber essa mensagem de erro por conta própria, sem nenhum rastreamento de pilha ou qualquer outra mensagem de erro.
Nesse caso, você precisa garantir que o manifesto do Android esteja configurado corretamente (incluindo qualquer fusão de manifesto ocorrida em uma biblioteca e qualquer atividade que venha de uma biblioteca) e prestar atenção especial à primeira atividade exibida no aplicativo nos arquivos de manifesto. .
fonte
Falha durante o desenvolvimento
Experimente o meu logview de ferramenta favorito para obter os logs e analisá-los durante o desenvolvimento.
Certifique-se de marcar
./logview
e./lib/logview.jar
como executável ao executar no Linux.Se você não gostar, existem muitos visualizadores alternativos de registros de desktop para Android .
Bater em estado selvagem
Integre uma ferramenta de relatório de falhas em tempo real, como o Firebase Crashlytics , a fim de obter traços de pilha de exceções não que ocorreram nos dispositivos dos usuários.
Leia Como liberar um aplicativo de buggy (e viva para contar a história) para saber mais sobre como lidar com bugs no campo.
fonte
As pessoas cometem erros e também codificam.
Sempre que
error
acontecer, verifique sempre com o logcat o texto em vermelho, mas você pode descobrir o problema real no texto em azul com sublinhado no texto em vermelho.Certifique-se de criar um novo
activity
, sempre declare oactivity
noAndroidManifest
arquivo.Se adicionar Permissão, declare-a no
AndroidMainifest
arquivo também.fonte
Logcat - Para verificar os logs na fase de desenvolvimento do Android Studio
Limpe inicialmente o Logcat e deixe o aplicativo travar novamente, para que você possa obter apenas os detalhes do log com falha. Você deve verificar o rastreamento da pilha
Erro comum durante a falha do aplicativo, como:
Para resolver o erro de falha do aplicativo:
fonte
Primeiro, você precisa verificar onde e por que seu aplicativo falhou.
(Unfortunately, MyApp has stopped.).
Com a ajuda deLOG
, você pode descobrir o que deu errado.Depois disso, você descobrirá em que ponto seu aplicativo parou de corrigi-lo.
fonte
Se você não possui nenhum tipo de log interessante no seu terminal (ou eles não estão diretamente relacionados ao seu aplicativo), talvez o seu problema seja devido a uma biblioteca nativa. Nesse caso, você deve verificar os arquivos "tombstone" dentro do seu terminal.
O local padrão para os arquivos de marca para exclusão depende de cada dispositivo, mas se for esse o caso, você terá um log informando:
Tombstone written to: /data/tombstones/tombstone_06
Para mais informações, consulte https://source.android.com/devices/tech/debug .
fonte
A execução deste comando no terminal também pode ajudar a encontrar o problema:
gradlew build > log.txt 2>details.txt
você deve ir para o local do arquivo gradlew na leitura de dois arquivos de log acima.
fonte