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:
- El método takeRequest () de MockWebServer tarda mucho en responder o se bloquea
- Cómo transferir una lista ArrayList
- ¿Cómo obtener la URL redireccionada de OkHttp3?
- Crash casting AndroidKeyStoreRSAPrivateKey a RSAPrivateKey
- Facebook login nulo apuntador excepción android
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) .
- Aplicación de Android dañada usando texureview
- OnGlobalLayoutListener en Mono para Android
- Array / Lista enlazada: ¿el rendimiento depende de la * dirección * del recorrido?
- Apache Commons NET: ¿Debo crear un nuevo objeto FTPClient en cada conexión o reutilizar uno?
- Android en Eclipse autocompletes arg0, arg1,
- Obtener la cadena del día a partir del día de la semana integer java
- Cómo imprimir todas las claves y valores de HashMap en Android?
- Creación de un android.graphics.Bitmap desde C ++
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.
- Android 7 Native Crash: libc.so tgkill
- Androide escondido el keybord en la prensa entran (en un EditText)