Отладчик Android Studio выделяет неправильные строки

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

Рассмотрим этот код:

public int getAnswer(int a) { int retval = 18; int x = 25; int y = 50; while (a-- > 0) { if (a == 3) { retval = a; return retval; } } x = 10; y = 20; return 0; } 

Вызывается с

 int theAnswer = getAnswer(6); 

Перетащите обе строки, содержащие return и перед запуском кода, попробуйте предсказать результат и, следовательно, какая строка будет удалена.

Как вы можете себе представить из тон моего вопроса, подсвечивается неправильная линия, но возвращается правильный результат. Если вы пройдете через код, он танцует совсем немного.

Есть ли что-то, что можно настроить по-другому, чтобы отображались правильные строки? (Я использую новейшую Android-студию, которая, по моему мнению, потенциально нестабильна, но я уверен, что некоторое время наблюдал подобное поведение в Eclipse, но я никогда не тратил время на ее отслеживание, возможно, это Java-вещь) ,

Solutions Collecting From Web of "Отладчик Android Studio выделяет неправильные строки"

Это проблема с dx, которая является частью сборки, которая превращает ваши файлы Java .class в файлы .dx для упаковки в Android. Согласно этому:

https://code.google.com/p/android/issues/detail?id=34193

Если функция имеет несколько путей возврата, dx объединяет инструкцию return в одну команду возврата, поэтому во время отладки отладчик не может определить, к какой строке относится возврат, и что-то происходит. Это соответствует тому, что я вижу, когда пытаюсь воспроизвести вашу проблему: каждый раз через цикл он выполняет проверку if (a == 3) , перескакивает к return 0 в конце и затем возвращается обратно в цикл. Вы видите, что последний return 0 объединяется с return retval в середине цикла.

Я сомневаюсь, что это будет исправлено в ближайшее время, поэтому вам просто нужно научиться жить с ним. Извините, я знаю, что это безумно.

Попробуйте Build -> Rebuild project, а затем Shift + F9. У вас устаревший код работает на приложении.

Вот что сработало для меня, по крайней мере, для перехода на исходный код Android SDK:

  1. Установите платформу SDK и источники для Android SDK точно для уровня API версии Android, которую вы запускаете во время разработки (используйте страницу истории версий Android, чтобы узнать, какой уровень API на вашем устройстве).
  2. Скомпилируйте приложение именно для этой версии. Например, в Android Studio откройте файл build.gradle вашего приложения и установите значение compileSdkVersion соответственно.
  3. Отладка вашего приложения. Когда вы переходите к источнику Android SDK, вы должны увидеть правильную строку.
  4. (Необязательно) Перед развертыванием перекомпилируйте последнюю версию SDK. Другими словами, смените compileSdkVersion обратно.