Что случилось с отладкой в Eclipse на Android? [дубликат]

Возможный дубликат:
На вид бесполезная среда отладки для Android

Я был, очевидно, испорчен Visual Studio, потому что, хотя я просто изучаю Android и среду Eclipse, отладка приложений в Eclipse становится серьезным вредом к дальнейшему развитию.

Например, Eclipse скомпилирует это деление нулем очень хорошо:

public class Lesson2Main extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate (savedInstanceState);

        int i = 1 / 0;

        TextView tv = new TextView (this);
        tv.setText ("Hello, Android!");
        setContentView (tv);
    }
}

И затем, когда это выполняет его под отладчиком, я получу полный экран бесполезной информации об отладке, не, которых на самом деле указывает на меня на определенную строку, содержащую ошибку.

stackTrace является пустым в рамках исключения ('e') информационное дерево, и это просто указывает утверждению сообщения 'ArithmeticException'. (это хорошо, как насчет Вас указывают на меня в направлении того, где Вы нашли его!?)

Я посмотрел на всем протяжении экрана, и экранирован, что этот IDE не может разобраться в этом. Разработка с Eclipse обращаются все назад к 1991 с printf () как вход в каждом интервале затем для разыскивания ошибок? Серьезно.

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

Я не протестировал этот случай с XCode, но если iPhone dev. IDE обрабатывает это больше как Visual Studio, затем неудивительная, что рынок Android имеет так мало приложений.

Я взволнован Android, но кажется, что Eclipse мешает.

36
задан Community 23 May 2017 в 01:47
поделиться

4 ответа

Да, вы пропустили один из очень важных подключаемых модулей для Eclipse под названием «LogCat». Он собирает все журналы отладки, которые дает ваша программа Android, независимо от того, работает ли она на эмуляторе или на реальном телефоне. Последнее, очевидно, требует, чтобы телефон был подключен к компьютеру, и менее очевидно, что параметр в приложении -> Разработка -> Включить отладку по USB должен быть включен.

Сообщения LogCat дают вам полную разбивку того, что вызвало ошибку, включая номер строки. Чтобы открыть LogCat в Eclipse, перейдите в Window -> Show View -> Other -> Android (одна из папок в списке) -> LogCat. Затем закрепите окно LogCat где-нибудь, где вы его легко увидите, и Eclipse запомнит это место и снова откроет его при следующем запуске.

(Иногда LogCat и эмулятор отключаются друг от друга. Простой способ исправить это - просто закрыть Eclipse и эмулятор, а затем перезапустить их оба.)

25
ответ дан 17 November 2019 в 23:39
поделиться

Я получаю следующую трассировку стека в logcat:

03-31 17:01:11.272: ERROR/AndroidRuntime(205): java.lang.RuntimeException: Unable to start activity ComponentInfo{MyClass}: java.lang.ArithmeticException: divide by zero
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.os.Looper.loop(Looper.java:123)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.main(ActivityThread.java:4203)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at java.lang.reflect.Method.invokeNative(Native Method)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at java.lang.reflect.Method.invoke(Method.java:521)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at dalvik.system.NativeStart.main(Native Method)
03-31 17:01:11.272: ERROR/AndroidRuntime(205): Caused by: java.lang.ArithmeticException: divide by zero
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at MyClass.onCreate(MyClass.java:40)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     ... 11 more

Это совершенно ясно. Посмотрите на вызывающую исключительную ситуацию в строке 14 трассировки стека, и там написано: Разделить на ноль. Это то, что вы сделали неправильно. В следующей строке написано: at MyClass.onCreate (MyClass.java:40) Это строка, в которой возникает исключение. Я не понимаю, что было бы сложно или бесполезно по этому поводу. Как VS представит это?

10
ответ дан 17 November 2019 в 23:39
поделиться

Вы испытываете типичную проблему разработки с физическим устройством, а не с частью программного обеспечения на машине.

Это укажут вам на конкретную ошибку (Опубликуйте информацию, и мы можем показать вам) Просто найдите имена ваших пакетов в ошибке, она покажет, где было выброшено исключение.

Следует также использовать точки останова для пошагового выполнения процесса и просмотра того, что происходит, отладчик DDMS должен соответствовать всем необходимым требованиям.

И да, вы должны использовать логирование Log.i(TAG, "Info: " + x);

Вы не можете предсказать все, что происходит, и по мере роста вашей кодовой базы вы будете рады, что начали делать это рано.

1
ответ дан 17 November 2019 в 23:39
поделиться

(В комментарии слишком много сказано, поэтому я пишу это как ответ.)

Вы можете настроить Eclipse так, чтобы он останавливался при обнаружении, неперехваченных исключениях или обоих случаях. По умолчанию Eclipse прерывается при любом неперехваченном исключении и игнорирует все перехваченные исключения (т.е. все, что заблокировано блоком try / catch).

С Android все становится немного странно, потому что вы работаете в среде приложения, а не в отдельном приложении. Как видно из приведенной выше трассировки стека, исключение фактически было перехвачено ActivityThread. Это означает, что ваше начальное исключение считается "перехваченным" и не будет отключать обработку прерывания при неперехваченном Eclipse, пока ActivityThread не вызовет его повторно. По этой причине стек, который вы видите в отладчике, когда он останавливается, не может быть рядом с вашим кодом.

Поскольку вы знаете, что получаете исключение ArithmeticException, вы можете остановить его на «пойманных» экземплярах этого исключения, и оно остановится в точке выброса. (Не допускайте прерывания для всех перехваченных исключений - вы будете бесконечно нажимать «возобновить».)

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

11
ответ дан 17 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: