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:
- Tipo no coincidente: no se puede convertir de StringBuilder a String
- Crear cadena JSON con GSON
- ¿Existe alguna diferencia entre "center_horizontal | center_vertical" y "center"
- Buenas prácticas: Patrón de diseño para la navegación en pantalla 2D HUD
- ¿Cómo saber si ahora el tiempo es entre dos horas?
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) .
- XML vs JSON. ¿Cuál es mejor para almacenar un pequeño fragmento de datos?
- Cómo obtener TTL de un paquete UDP en Java?
- Escala una vista para el tamaño de otra vista usando ValueAnimator
- Fuera de error de memoria: Java heap memory en Android Studio
- Cambiar la posición de TextView dinámicamente usando java en RelativeLayout android
- el enlace de datos; la etiqueta de la vista no es correcta, Android
- Android java.lang.IllegalArgumentException in HttpGet
- Android Facebook Graph api información básica que solicita
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:
- 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).
- 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 decompileSdkVersion
consecuencia. - Depurar su aplicación. Cuando entre en la fuente de Android SDK, debería ver la línea correcta.
- (Opcional) Recompile con el SDK más reciente antes de implementar. En otras palabras, cambie
compileSdkVersion
nuevo.