Отладка приложения Eclipse для Android - отладчик показывает неправильное выполнение строки

119
11

При внедрении интеграции Twitter в моем приложении я обнаружил следующую нечеткость отладчика Eclipse. Чем это вызвано?

Я использую эту AsyncTask для получения маркера запроса из твиттера с помощью twitter4j 3.0.3.

    public class TwitterRequestAsync extends AsyncTask<Void, Void, RequestToken> {

private Context context;

public TwitterRequestAsync(Context context) {

this.context = context;
}

@Override
protected RequestToken doInBackground( Void... params ) {

Twitter twitter = getTwitter(); // getTwitter() is in enclosing class
try {
RequestToken token = twitter.getOAuthRequestToken();
return token;
}
catch (TwitterException e) {
Log.e( TAG, e.getMessage(), e );
return null;
}
}

@Override
protected void onPostExecute( RequestToken result ) {

super.onPostExecute( result );
if ( result != null ) {
// stuffs concerning request token here
}
}

}

Когда я отлаживаю этот код, кажется, что возникает исключение, когда getOAuthRequestToken() выполняется, а следующая строка, которую показывает отладчик, выполняется в предложении catch, возвращает null;

Однако результат, возвращаемый onPostExecute (...), является допустимым токеном запроса, поэтому отладчик делает что-то странное. Я очистил свой проект и перезапустил Eclipse каждые несколько раз без изменений в этом поведении. Я сломался?

спросил(а) 2021-01-19T12:00:58+03:00 8 месяцев назад
1
Решение
65

Это известная проблема. Похоже, что это может быть проблемой с Dalvik VM. Показано, что последний оператор возврата метода выполняется в отладчике.

Изменение doOBackground тела на:

        @Override
protected RequestToken doInBackground( Void... params ) {

Twitter twitter = getTwitter();
RequestToken token = null;
try {
token = twitter.getOAuthRequestToken();
}
catch (TwitterException e) {
Log.e( TAG, e.getMessage(), e );
}
return token;
}

Заставляет выполнение работать, как ожидалось.

См. Https://groups.google.com/forum/?fromgroups=#!topic/android-developers/DEU6JmdyFyM для старого упоминания проблемы со ссылкой на еще более раннее упоминание. Кто-то, наконец, создал проблему для этого на странице https://code.google.com/p/android/issues/detail?id=34193.

ответил(а) 2021-01-19T12:00:58+03:00 8 месяцев назад
64

Как отмечает ваш автоответ, это известная проблема. Я хотел бы отметить, что это (и другие причуды) задокументированы в документах Dalvik. Вы можете найти его в официальной, но необработанной форме, или неофициальной, но отформатированной - перейдите к "Известные проблемы и ограничения".

Было бы неплохо, если бы документация была более заметной.

ответил(а) 2021-01-19T12:00:58+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема