Как вы отлаживаете Android в Eclipse - PullRequest
6 голосов
/ 26 ноября 2010

Попробуйте следующее:

  1. Создайте приложение HelloWorld.

  2. Добавить оператор Log в конец onCreate:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d("HelloWorldActivity.onCreate()", "setContentView() completed");
    }
  
  1. Поместить точку останова в оператор Log.

  2. Запустите приложение в эмуляторе и отметьте, что оно работает, и перейдите к записи Logged в окне LogCat Eclipse.

  3. Измените HelloWorldActivity так, чтобы оно расширялось от ListActivity вместо Activity.

    public class HelloWorldActivity extends ListActivity {
    
  4. Запустите приложение в эмуляторе и обратите внимание, что оно не достигает журнала.заявление.

Мой вопрос не в том, почему это не удается.Мой вопрос, как бы вы пошли на устранение этого сбоя?Все, что я вижу на панели Eclipse Debug, - это исключение RuntimeException.Я вижу, что в LogCat есть куча сообщений, но она огромна, и я искал ее, но не могу найти ничего, что указывало бы, что не так или где в моем коде произошло исключение.Я не могу найти способ отобразить сообщение внутри RuntimeException или трассировки стека, чтобы узнать, какая строка кода инициировала исключение.

Я предполагаю, что должны быть более эффективные способы использования инструментов для поиска ошибок, но я новичок и, похоже, не могу найти лучший способ отладки, кроме как упаковывать все, что я кодирую, в try / catch.Я ожидал бы найти сообщение в LogCat, сгенерированное броском исключения.Я ожидал, что окно Debug позволит вам проверить содержимое исключения.Я не говорю, что таких методов не существует, я говорю, что у меня возникают трудности с поиском новичка, как отлаживать и спрашиваю, какие методы существуют и как их использовать?

Итак, проще говоря:

  • Как бы вы нашли эту ошибку, если бы вы еще не знали, что ее вызвало?
  • Какие методы вы бы использовали, чтобы выяснить первопричину?
  • Как вы будете проверять детали Исключения?
  • Вообще, как вы находите проблемы в своем коде Android с помощью Eclipse?

Приветствуются многочисленные предложения и обсуждения.:)

Я бы включил содержимое моего LogCat, но оно настолько большое, что не разумно.Вы должны быть в состоянии легко воспроизвести это самостоятельно, поэтому я оставил это.Возможно, что-то есть в LogCat, чтобы помочь мне, но, поскольку оно настолько велико, что даже запускает небольшую программу, мне потребуется подсказка о том, что искать и как его интерпретировать при попадании в исключение, вызванное вызовом API.Я вижу другие сообщения, в которых говорится, что что-то должно быть в LogCat, хотя, хотя это может быть правдой, я сам ничего не нахожу.Если вы думаете, что что-то должно быть в LogCat, пожалуйста, запустите тест самостоятельно и скопируйте строки в ваш ответ, который я должен найти.

Спасибо.

========

Сводный список методов на данный момент выглядит следующим образом:

Инвазивные методы: 1. Разместите тост в местах кода, где вы хотитеувидимся, ты казнил.2. Поместите try / catch вокруг кода там, где, по вашему мнению, существует вероятность возникновения исключения.3. Закомментируйте код, перекомпилируйте и повторно протестируйте.

Неинвазивные методы: 1. Используйте отладчик.Точки останова, переменная проверка ... 2. Стресс тестер обезьян.3. Загрузите исходную библиотеку Android.4. Используйте фильтры LogCat, чтобы увидеть, есть ли в списке «Причина».

Непонятно, если доступно: 1. Отладочная версия библиотеки Android, в которой есть дополнительная регистрация, утверждения или другая дополнительная помощь.2. Возможность просмотра исключения в Eclipse с помощью панели «Отладка» или других методов.3. Способ определения более глобального обработчика исключений try / catch.4. Возможность отладки через исходный код библиотеки Android.

Недоступно: 1. Неинвазивный способ просмотра содержимого исключения или того, где произошло исключение.

Ответы [ 4 ]

2 голосов
/ 26 ноября 2010

эй, Интересный вопрос. Ну, первый совет, вы можете отфильтровать то, что говорит вам logcat. Например, вы просто показываете ошибки, нажимая красным (e). Он также сообщает вам, где произошла ошибка, если вы запускаете приложение в режиме отладки. Он может указывать вам непосредственно на ваш код или на Android SDK. Знание того, что пакет Android вызвал ошибку, - большая помощь.

Эти двое просто появляются у меня в голове. надеюсь, это поможет!

1 голос
/ 29 ноября 2010

Я столкнулся с той же проблемой и обнаружил следующее: Стив Х. помог мне:

Что происходит, когда подключенный отладчик журналы исключений не публикуются вLogCat до тех пор, пока вы не завершите приложение из перспективы отладки.Это происходит потому, что приложение на самом деле не падает, пока отладчик не отключится.- Стив Х. 31 марта в 15: 47

------ Да, это было сделано.Теперь я вижу то же исключение.ПОСЛЕ того, как я позволил программе пройти через полный процесс сбоя и выхода.Эта информация должна отображаться, когда она останавливает мою программу и вызывает экраны отладчика IDE.Не заставляй меня задумываться и тратить свое время на то, чтобы больше щелкать вокруг.Eclipse еще предстоит пройти долгий путь, похоже, он может конкурировать с подобными Visual Studio.Будем надеяться, что мое терпение превзойдет мой проект.Спасибо за ответ.:) - Себастьян Дворник 31 марта в 17: 35

Ссылка на вопрос: Что не так с отладкой в ​​Eclipse на Android?

0 голосов
/ 26 ноября 2010

Исключения, не обнаруживаемые при использовании try / catch, являются ошибками и нарушают нормальную работу программы.

Для запуска в режиме отладки достаточно нажать кнопку ошибки. Я не знаю, есть ли какие-нибудь "специальные" библиотеки отладки. Но при работе с Android все «библиотеки» имеют открытый исходный код, поэтому вы можете просматривать практически все.

Хорошая особенность режима отладки состоит в том, что при возникновении ошибки ваше приложение останавливается прямо в подвешенном состоянии, когда возникает ошибка. Вы можете устанавливать контрольные точки, изменять код на лету, пока ваша программа работает, и это здорово (ну, вы не можете вносить радикальные изменения, такие как изменение имени метода).

Однако способ обработки ошибок и ошибок в Android может немного отличаться от .NET, поскольку модель в каждой из них отличается.

При программировании на окна приложения работают как маленькие островки. У вас есть много прямого контроля над потоком кода (то есть: вы можете вызвать модальное диалоговое окно, чтобы заморозить поток кода, пока пользователь вводит некоторые данные), и вы можете сделать полностью функциональную программу, используя только один поток. В Android почти все работает в своей синхронизации. И ваше приложение должно быть готово обрабатывать такие вещи, как получение телефонного звонка во время исполнения. Таким образом, вы можете применить эту модель к отладке также: Ошибки (которые происходят из-за непредвиденных обстоятельств) имеют тенденцию распространяться гораздо больше, чем в других средах разработки . Способ обработки этих ошибок также различен: это становится очевидным, когда вы понимаете, что ваше приложение продолжает работать даже после создания исключения.

Еще несколько полезных советов: У вас есть очень мощный инструмент под названием Monkey, инструмент стресса, который генерирует «псевдослучайные потоки пользовательских событий, таких как щелчки, касания или жесты, а также ряд системных Уровень событий ".

LogCat указывает вам «причину» ошибки. Строка обычно начинается с «Причины». Если вас интересует причина, а не следствие, вы можете дополнительно отфильтровать отчеты об ошибках в поиске «Причины».

И последнее, но не менее важное: я нахожу старый метод комментирования строк и вижу, что происходит очень полезно для выяснения вещей.

надеюсь, это поможет

0 голосов
/ 26 ноября 2010

Как правило, если что-то выдает исключение, вам, вероятно, все равно придется удовлетворять эту ситуацию, однако установка блоков try / catch - достойный способ найти конкретную проблему.Я обнаружил, что если вы не поместите что-то в блок catch, вы не сможете оценить исключение в окне наблюдения переменных в eclipse.Поэтому я всегда помещаю вход в журнал и устанавливаю точку останова на этой линии.

public void onCreate(Bundle savedInstanceState) {
    try{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }catch(Exception exception)
    {
        // put break point on line below so you can evaluate exception in debug mode.
        Log.e(TAG, "Set content exception "+ exception.getMessage());
        // note some exceptions return null on getMessage();
    }
    Log.d("HelloWorldActivity.onCreate()", "setContentView() completed");
}

Так что, если ваш след стека огромен, то это поможет.Другие разработчики также обнаружили, что получение исходного кода для SDK означает, что вы можете увидеть, где выдается ошибка в основном коде SDK.Я не сделал этого, хотя.

...