El depurador de Android Studio destaca las líneas incorrectas

No puedo ver nada funcionalmente mal en términos de lo que se ejecuta, pero he desperdiciado una hora probar mi código y el compilador está haciendo lo que se supone que.

Considere este código:

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; } 

Llamado con

 int theAnswer = getAnswer(6); 

El punto de interrupción de las líneas que contienen el return y antes de ejecutar el código, tratar de predecir el resultado y, por tanto, qué línea se golpeará.

Como se puede imaginar a partir del tono de mi pregunta, la línea equivocada se resalta, pero se devuelve el resultado correcto. Si recorre el código, baila un poco.

¿Hay algo que se puede configurar de manera diferente para que se muestren las líneas correctas? (Estoy utilizando el último Android Studio, que aprecio es potencialmente inestable, pero estoy seguro de que he visto un comportamiento similar en Eclipse hace un tiempo atrás, pero nunca pasé el tiempo, a continuación, rastreo hacia abajo, tal vez es una cosa de java) .

Este es un problema con dx, que es la parte de la compilación que convierte sus archivos .class de Java en archivos .dx para su empaquetado en Android. De acuerdo a esto:

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

Si una función tiene múltiples rutas de retorno, dx fusiona la instrucción de retorno en una sola instrucción de retorno, por lo que durante la depuración, el depurador no puede decir a qué línea pertenece un salto y las cosas saltan alrededor. Esto corresponde a lo que veo cuando trato de reproducir su problema: cada vez que pasa por el bucle hace la comprobación if (a == 3) , salta al return 0 al final y luego vuelve a saltar al bucle. Estás viendo que el último return 0 se fusionó con el return retval en el medio del bucle.

Dudo que esto se arreglará en cualquier momento pronto, por lo que sólo tendrá que aprender a vivir con ella. Lo siento, sé que es un poco loco.

Intente construir -> reconstruir proyecto y luego Mayús + F9. Tiene código obsoleto ejecutándose en la aplicación.

Esto es lo que funcionó para mí, al menos para entrar en el código fuente de Android SDK:

  1. Instale la Plataforma SDK y Fuentes para Android SDK exactamente para el nivel de API de la versión de Android que está ejecutando durante el desarrollo (utilice la página del historial de versiones de Android para averiguar qué nivel de API tiene su dispositivo).
  2. Compile su aplicación exactamente para esa versión. Por ejemplo, en Android Studio, abra el archivo build.gradle su aplicación y establezca el valor de compileSdkVersion consecuencia.
  3. Depurar su aplicación. Cuando entre en la fuente de Android SDK, debería ver la línea correcta.
  4. (Opcional) Recompile con el SDK más reciente antes de implementar. En otras palabras, cambie compileSdkVersion nuevo.
  • ¿Cómo puedo clasificar mi Arraylist alfabético? (Java)
  • Android EPSON thermal Imprimir los datos desde la vista web al hacer clic? Si la impresora no se encuentra?
  • Android - ¿Puedes actualizar un Cursor para los resultados de SQLite?
  • ¿El zócalo del cliente androide, cómo leer datos?
  • Envío de un archivo pdf al cliente desde el servidor a través del servicio web
  • Android Location.getAccuracy () devuelve 1
  • Almacene una clave o contraseña de forma segura localmente en android
  • ProgressBar con un countdowntimer - Android
  • La ejecución de instrumentación falló debido a 'java.io.FileNotFoundException'
  • ¿Alternativas para DOM API en Android?
  • Android principiante - Coloca la imagen en DragEvent
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.