Я разрабатываю приложение, и каждый раз, когда я запускаю его, я получаю сообщение:
К сожалению, MyApp остановился.
Что я могу сделать, чтобы решить эту проблему?
Об этом вопросе, явно вдохновленном тем, что такое трассировка стека, и как я могу использовать ее для отладки ошибок моего приложения? Есть много вопросов о том, что их приложение не работает, без каких-либо дополнительных подробностей. Этот вопрос направлен на то, чтобы научить начинающих Android-программистов, как самим пытаться решить свои проблемы, или задать правильные вопросы.
Ответы:
Этот ответ описывает процесс получения трассировки стека. Уже есть трассировка стека? Прочтите о трассировке стека в разделе « Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения? »
Проблема
Ваша заявка завершилась, потому что
RuntimeException
был брошен невосприимчивый .Наиболее распространенным из них является
NullPointerException
.Как это решить?
Каждый раз, когда происходит сбой приложения Android (или любого другого приложения Java),
Stack trace
в консоль записывается a (в данном случае logcat). Эта трассировка стека содержит важную информацию для решения вашей проблемы.Android Studio
В нижней панели окна нажмите на
Logcat
кнопку. Кроме того, вы можете нажать alt+ 6. Убедитесь, что наDevices
панели выбран ваш эмулятор или устройство . Далее попробуйте найти трассировку стека, которая показана красным. В logcat может быть много материала, поэтому вам может понадобиться немного прокрутить. Простой способ найти трассировку стека - очистить logcat (с помощью корзины справа) и снова вызвать сбой приложения.Я нашел трассировку стека, что теперь?
Ура! Вы на полпути к решению вашей проблемы.
Вам нужно только выяснить, что именно привело к сбою приложения, проанализировав трассировку стека.
Прочтите о трассировке стека в разделе « Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения? »
Я до сих пор не могу решить мою проблему!
Если вы нашли свое место
Exception
и линию, где это произошло, и все еще не можете понять, как это исправить, не стесняйтесь задавать вопрос о StackOverflow.Постарайтесь быть как можно более кратким: опубликовать трассировку стека и соответствующий код (например, несколько строк до строки, которая выкинула
Exception
).источник
Android > Devices|Logcat
и добавить новый фильтр ( i.imgur.com/145dtkx.png ) и отфильтровать его, чтобы добавитьby Log Message
сюдаFATAL EXCEPTION
( i.imgur.com/HpELhaU). .png ) так что в этом поле вы можете прочитать все,Exceptions
что выбрасывает ваше приложение. При этом вам не нужно очищать logcat и снова делать сбой. Я думаю, что Android Studio также имеет эту опцию.Вы можете использовать инструмент Google ADB для
Logcat file
анализа проблемы.Откройте
logcat.txt
файл и найдите имя вашего приложения. Должна быть информация о том, почему произошел сбой, номер строки, имя класса и т. Д.источник
-d
, в противном случае вы не нажмете ctrl-C для выхода из logcat. Я делаюadb logcat -v time -d > filename.txt
Сначала вы проверяете, в какой точке вашего приложения произошел сбой (
Unfortunately, MyApp has stopped.
). Для этого вы можете использоватьLog.e("TAG", "Message");
, с помощью этой строки вы можете увидеть журнал вашего приложения в logcat.После этого вы обнаружите, в какой момент ваше приложение остановилось, и это очень легко решить на вашей стороне.
источник
Просто проверьте ошибку в журнале кота.
Вы получаете опцию log cat в eclipse:
Журнал cat содержит ошибку.
В противном случае вы также можете проверить ошибку, запустив приложение в режиме отладки. Сначала установите точку останова после этого, выполнив:
источник
Примечание. Для ответа используется Android Studio 2.2.2.
Примечание 2: я считаю, что ваше устройство успешно подключено.
Первое, что вы делаете, когда происходит сбой вашего приложения, это заглядываете в LogCat, в нижней части Android Studio есть панель инструментов со списком меню:
Нажмите на «Android Monitor» (тот, который я подчеркнул на изображении выше. ^)
Теперь вы получите что-то вроде этого:
Измените "
Verbose
" на "Error
" Теперь он будет показывать только зарегистрированные ошибки. Не беспокойтесь обо всех этих ошибках (если вы их получили) сейчас.Хорошо. Теперь сделайте то, что вы сделали, чтобы разбить ваше приложение. После сбоя приложения перейдите на страницу logcat. Вы должны найти новый журнал сбоев, который имеет много
at:x.x.x
: и,Caused by: TrumpIsPresidentException
например. Перейти к этомуCaused by:
утверждению в вашем logcat.Рядом с этим
Caused By:
должно быть исключение, которое произошло. В моем случае это a,RuntimeException
а под ним должна быть строка, содержащая синюю ссылку, например:Если у этого
Caused by:
нет строки с синим текстом где-то под ним, тогда ищите другую,Caused by:
которая делает.Нажмите на эту синюю ссылку . Это должно привести вас туда, где возникла проблема. В моем случае это было связано с этой строкой:
Итак, теперь я знаю, почему он падает. Это потому что я бросаю исключение сам. Это была очевидная ошибка .
Однако, допустим, я получил еще одну ошибку:
Я проверил свой logcat, я нажал на синюю ссылку, которую он дал мне, и это заняло меня здесь:
Итак, теперь я хочу отлаживать. Согласно этому вопросу StackOverflow , NullPointerException говорит, что что-то есть
null
.Итак, давайте выясним, что является нулевым . Есть две возможности. Либо
mTextView
ноль, либоmyString
ноль. Чтобы выяснить, передmTextView.setText(mString)
строкой я добавлю эти две строки:Теперь, как мы делали ранее (мы изменили Verose на Error), мы хотим изменить «Error» на «Debug». Так как мы регистрируемся путем отладки. Вот все методы Log:
Итак, так как мы использовали
Log.d
, мы проверяем в Debug. Вот почему мы изменили его на отладку.Уведомление
Log.d
имеет первый параметр, в нашем случае «AppDebug». Нажмите на раскрывающееся меню «Нет фильтров» в правом верхнем углу logcat. Выберите «Редактировать конфигурацию фильтра», дайте имя вашему фильтру и в «Log Tag» вставьте «App Debug». Нажмите «ОК». Теперь вы должны увидеть две строки в logcat:Итак, теперь мы знаем, что mTextView является нулевым.
Я наблюдаю мой код, теперь я что-то замечаю.
я имею
private TextView mTextView
объявил на вершине своего класса. Но я не определяю это.В основном я забыл сделать это в моем onCreate ():
Так вот почему
mTextView
это ноль, потому что я забыл сказать своему приложению, что это такое. Поэтому я добавляю эту строку, запускаю свое приложение, и теперь оно не падает.источник
Это всплывающее окно отображается только в том случае, если в вашем коде появляется фатальное исключение, которое останавливает выполнение приложения. Это может быть любое исключение
NullPointerException
,OutOfMemoryException
т. Д.Лучший способ проверить это с помощью Logcat, если вы все еще разрабатываете приложение в Android Studio, что является быстрым способом чтения трассировки стека и проверки причины возникновения приложения.
Если ваше приложение уже работает, то вы не можете использовать logcat . Таким образом, для этого вы можете реализовать,
Crashlytics
чтобы предоставить вам отчеты об ошибках любого возникающего исключения.источник
Проверьте ваше
Logcat
сообщение и посмотрите вашManifest
файл. Должно быть что-то упущенное, например определениеActivity,
разрешения пользователя и т. Д.источник
Вы можете использовать любой из этих инструментов:
Предлагаю использовать Android Debug Monitor , это хорошо. Потому что eclipse зависает, когда там слишком много журналов, а через adb logcat filter и все сложно.
источник
Вы должны проверить
Stack trace
Как это сделать?
на вашей IDE Проверьте форму окна LOGCAT
Если вы не видите окна LogCat, перейдите по этому пути и откройте его
если вы используете Google-Api, перейдите по этому пути
adb logcat> logcat.txt
источник
В приведенном ниже методе showToast () вы должны передать другой параметр для контекста или контекста приложения, тем самым вы можете попробовать его.
источник
Позвольте мне поделиться базовым анализом Logcat, когда вы встречаетесь с Force Close (когда приложение перестает работать).
DOCS
Основным инструментом Android для сбора / анализа логов является logcat.
ЗДЕСЬ есть страница Android о logcat
Если вы используете Android Studio, вы также можете проверить эту ССЫЛКУ .
Capturing
По сути, вы можете вручную захватить logcat с помощью следующей команды (или просто проверить окно AndroidMonitor в AndroidStudio):
К команде можно добавить множество параметров, которые помогут вам отфильтровать и отобразить нужное сообщение ... Это личное ... Я всегда использую приведенную ниже команду для получения метки времени сообщения:
Вы можете перенаправить вывод в файл и проанализировать его в текстовом редакторе.
Анализ
Если ваше приложение Crashing, вы получите что-то вроде:
Эта часть журнала показывает вам много информации:
07-09 08:29:13.475
Важно проверить, когда возникла проблема ... Вы можете найти несколько ошибок в журнале ... вы должны быть уверены, что проверяете правильные сообщения :)
com.example.khan.abc
Таким образом, вы знаете, какое приложение упало (чтобы убедиться, что вы проверяете журналы своего сообщения)
java.lang.NullPointerException
Ошибка исключения указателя NULL
Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
Вы пытались вызвать метод
onBackPressed()
изFragmentActivity
объекта. Тем не менее, этот объект был,null
когда вы это сделали.Stack Trace: Stack Trace показывает порядок вызова метода ... Иногда ошибка возникает в вызывающем методе (а не в вызываемом методе).
на com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)
Ошибка произошла в файле
com.example.khan.abc.AudioFragment.java
, внутриonClick()
метода в строке:125
(трассировка стека показывает строку, в которой произошла ошибка)Он был вызван:
Который был вызван:
который был вызван:
так далее....
обзор
Это был просто обзор ... Не все журналы просты и т. Д ... Это просто для того, чтобы поделиться идеей и предоставить вам информацию начального уровня ...
Я надеюсь, что смогу вам как-нибудь помочь ... С уважением
источник
Используйте LogCat и попытайтесь найти причину сбоя приложения.
Чтобы увидеть Logcat, если вы используете Android Studio, нажмите ALT + 6 или
если вы используете Eclipse, то Window -> Open Perspective -> Other - LogCat
Зайдите в LogCat, из выпадающего меню выберите ошибку. Он будет содержать всю необходимую информацию, чтобы помочь вам отладки. Если это не поможет, опубликуйте LogCat в качестве редактирования вашего вопроса, и кто-нибудь вам поможет.
источник
Если ваше приложение по какой-то причине вылетает без хорошей трассировки стека. Попробуйте отладить его с первой строки, и переходите от строки к строке до сбоя. Тогда у вас будет ответ, какая линия доставляет вам неприятности. Вероятно, вы могли бы затем обернуть его в блок try catch и напечатать вывод ошибок.
источник
Вы также можете получить это сообщение об ошибке самостоятельно, без какой-либо трассировки стека или каких-либо дальнейших сообщений об ошибках.
В этом случае вам необходимо убедиться, что ваш манифест Android настроен правильно (включая любое слияние манифеста, происходящее из библиотеки, и любое действие, которое будет происходить из библиотеки), и уделять особое внимание первому действию, отображаемому в вашем приложении в файлах манифеста. ,
источник
Сбой во время разработки
Попробуйте мой любимый инструмент logview, чтобы получать логи и анализировать их во время разработки.
Обязательно отметьте
./logview
и./lib/logview.jar
как исполняемый файл при запуске в Linux.Если вам это не нравится, есть много альтернативных программ просмотра журналов рабочего стола для Android .
Крушение в дикой природе
Интегрируйте инструмент для создания отчетов о сбоях в реальном времени, такой как Firebase Crashlytics в , чтобы получить стековые трассы необработанных исключений, которые произошли на устройствах пользователей.
Прочтите « Как выпустить приложение с ошибками» (и «Живи, чтобы рассказать сказку»), чтобы узнать больше об обработке ошибок в поле.
источник
Люди делают ошибки, а значит и кодируют.
Когда что-нибудь
error
случалось, всегда проверяйте logcat с текстом красного цвета, однако вы можете обнаружить реальную проблему с синим цветом текста с подчеркиванием в этом красном цвете текста.Убедитесь, что если вы создаете новый
activity
, всегда объявляйтеactivity
вAndroidManifest
файле.Если вы добавляете Разрешение, объявите его также в
AndroidMainifest
файле.источник
Logcat - для проверки журналов на этапе разработки Android Studio
Сначала очистите Logcat и дайте приложению снова аварийно завершить работу, чтобы вы могли получить только подробности разбившегося журнала. Вы должны проверить трассировку стека
Распространенная ошибка при сбое приложения, например:
Чтобы устранить ошибку сбоя приложения:
источник
Во-первых, вам нужно проверить, где и почему произошло сбой вашего приложения.
(Unfortunately, MyApp has stopped.).
С его помощьюLOG
вы можете выяснить, что пошло не так.После этого вы обнаружите, в какой точке ваше приложение перестало это исправлять.
источник
Если у вас нет каких-либо интересных журналов в вашем терминале (или они не имеют прямого отношения к вашему приложению), возможно, ваша проблема связана с собственной библиотекой. В этом случае вам следует проверить наличие файлов «tombstone» в вашем терминале.
Расположение по умолчанию для надгробных файлов зависит от каждого устройства, но если это так, у вас будет журнал, сообщающий:
Tombstone written to: /data/tombstones/tombstone_06
Для получения дополнительной информации, посетите https://source.android.com/devices/tech/debug .
источник
Также выполнение этой команды в терминале может помочь найти проблему:
gradlew build > log.txt 2>details.txt
Затем вы должны перейти к местоположению файла gradlew в двух файлах журнала выше.
источник