Es cierto, mi pregunta es básicamente el mismo que éste, pero parece haber quedado sin respuesta:Eclipse Android Debugger: ¿en qué parte de mi código causé la excepción?
NullPointerException in handleStopActivity -- No reference to my code in stack trace
descargado Eclipse Helios, Android Developer Tools Plugin, y el JDK todo dentro de la última semana. Estuve jugando con una aplicación en mi dispositivo, la ejecuté en el modo de depuración e inesperadamente finalizó. Me di cuenta de que había causado una NullPointerException y que el problema en sí no era un problema por mucho tiempo.
Lo que es un problema, sin embargo, es que el depurador parece incapaz de identificar en qué parte de mi código se lanzó la excepción. El seguimiento de la pila no hace referencia a mi código.
De hecho, si pongo el siguiente en el método OnCreate()
, me sale el mismo problema
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//lI("onCreate()"); //A silly logging thing I messed around with
Integer iDareYou = null;
iDareYou.byteValue();
Gran parte de su crédito, Eclipse, sin duda me advierte que el código es probable que estallar en la cara. Pero cuando realmente ejecutar esto en mi dispositivo, el seguimiento de pila devuelto es el siguiente:
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2787
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2803
ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 135
ActivityThread$H.handleMessage(Message) line: 2136
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 144
ActivityThread.main(String[]) line: 4937
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
Busqué algunas respuestas y por desgracia todo lo que podía llegar a eran preguntas del '¿Por qué está causando mi aplicación para Android una NullPointerException '? variedad.
Espero averiguar qué debería hacer de manera diferente para poder encontrar el punto en mi código donde causé la excepción .... porque estoy seguro de que esta capacidad sería útil en algún punto en el futuro!
Va a editar esto para agregar información. Como menciona el primer comentario a continuación, el estado en el que el depurador suspende el hilo no es el estado 'final' de la aplicación. Al presionar 'reanudar' un par de veces se mueve el proceso hasta el punto donde el proceso realmente termina, aunque lamentablemente no se muestra ningún rastro de pila útil en la ventana de depuración Eclipse/ADT. Sin embargo,, en este punto el seguimiento de la pila pegué por encima de seguido por las primeras 3 líneas únicas del seguimiento de la pila del NPE en mi código se envían a LogCat. Anteriormente había buscado para ver si LogCat tenía algo que pudiera usar, pero probablemente era antes de haber presionado 'reanudar' en el depurador para mover el proceso a este estado. Desafortunadamente, hacerlo de esta manera nunca muestra un rastro de pila del NPE en mi código en el depurador real.
Pero las noticias no son del todo malas: a partir de la información de la ventana 'Variables' de la derecha, puedo ver que hay un NPE en el alcance actual del subproceso, así que al menos podría darme una pista de que un NPE está sucediendo (y, por supuesto, está LogCat).
Basado en una sugerencia sobre un tema diferente, el mejor trabajo que he encontrado es agregar un punto de interrupción "Atrapado y no detectado" para NullPointerException. Cuando hago esto y reinicio, el depurador muestra el rastro de la pila del NPE en mi código, y mueve la ventana de edición directamente a la línea donde causé el NPE.
Por el momento, creo que esto se debe a que la NPE está siendo atrapada (y presumiblemente, arrojada de nuevo) por el marco de Android. Parece que el dilema original fue causado por el hecho de que la ventana Eclipse/ADT/DalvikVM Debug Stack Trace no incluye la información 'causada por' (que yo sepa) que se muestra en el seguimiento de pila "más tarde" que aparece en LogCat.Voy a investigar más sobre si esto puede remediarse :)
Agradezco la sugerencia de Bert F, ya que no era del todo consciente de que el hilo aún no estaba en su estado 'final'. Si bien es cierto que el seguimiento de la pila se muestra [más tarde] en LogCat, no lo "eché de menos" en LogCat porque todavía no estaba [allí], lo que sí extrañé fue presionar 'reanudar', lo que habría causado el seguimiento de la pila para salir en LogCat.
Aunque originalmente conseguí que el depurador se detuviera en la línea de mi código utilizando un punto de interrupción, hay razones para el hecho de que finalmente pude obtener el seguimiento de pila en LogCat después de reanudar el hilo, lo que efectivamente resuelve el problema. La única otra cosa que realmente podría pedir sería hacer que el depurador se detenga en la línea de mi código y cause la excepción, en lugar de que sea capturado y luego relanzado por el marco de Android. Pero creo que esa sería una pregunta diferente :) Y Eclipse, siendo útil como es, me enviará allí si hago clic en la línea apropiada en el seguimiento de la pila que se muestra en la ventana de LogCat.
Parece que el programa se suspendió en el depurador y no continuó imprimiendo la excepción y el seguimiento completo de la pila. Permitir que el programa continúe y luego mostrar el mensaje completo de excepción y stacktrace completo sería útil. A menudo, un NPE está envuelto por múltiples excepciones (impresión "causada por" en el seguimiento de la pila) - el mensaje "causado por" más bajo es probablemente el más importante.Además, si conoce su rev, puede ayudar encontrar la fuente para que coincida con el rastro de la pila. –
Bert, si deseas volver a publicar como respuesta, estoy dispuesto a aceptarlo, se podría decir: "empujando el currículum vitae obtendrá el seguimiento de la pila que pedí" – user602347
¡No eres la única persona que no pudo entender esto! Sin embargo, estás en lo cierto: toca el juego un par de veces para que la excepción salte y luego mira LogCat en lugar del rastro de la pila. He usado muchos IDEs y me parece extraño que "la línea de mi código que salió mal" parezca ser algo que solo los expertos pueden descubrir ... –