«

»

ene 30 2012

Conectar al debugger forzosamente

Hoy os traigo un pequeño tip que he encontrado recientemente, que si bien no será de uso cotidiano os puede venir bien en alguna ocasión como a mi. Se trata de forzar que nuestra aplicación se conecte al Debugger. Normalmente no nos hará falta, ya que en Eclipse mismo tenemos la opción de Ejecutar o Depurar que hace que el debugger se conecte con la aplicación automáticamente. Pero hay casos en que no nos vale del todo.


Es sobre todo útil cuando necesitamos depurar una parte de la aplicación a la que no se accede por un punto de entrada principal, sino que se llega mediante Intents implícitos como la función de compartir. El problema de ejecutar la aplicación en modo depuración es que al cerrarse la actividad el debugger se desconecta (como es lógico), y cuando accedemos al punto que queremos depurar mediante la acción correspondiente el debugger ya no está. ¿Cómo lo solucionamos? Forzando la conexión.

Y es tan sencillo como una triste línea de código:

Debug.waitForDebugger();

La llamada a ese método provoca que la aplicación se pare hasta que el debugger se conecte. Después de esta línea podemos poner un breakpoint y si todo va bien la aplicación se suspenderá como es debido.

Notice

Mucho cuidado con el método, porque no tiene timeout. Mientras no sea capaz de conctar con el debugger seguirá esperando, provocando un ANR. Así que no lo dejéis por ahí descuidado, cuando terminéis de depurar lo que necesitáis borrar la llamada o comentadla

En mi caso lo he descubierto como necesidad al depurar un servicio que se ejecuta como respuesta a una descarga. No estoy muy seguro de por qué pero mientras depuro el servicio el debugger se desconecta sin aviso previo y la aplicación sigue corriendo a sus anchas. Con esto es tan fácil como llamar al método antes de las partes importantes del código que quiero depurar y se acabó el problema.

También puede ser de utilidad si necesitamos depurar una parte concreta del código solamente. Quizá hayáis notado que mientras se están depurando las aplicaciones corren más lentas. A veces esta lentitud es significante, y nos sería más rentable ejecutarla sin debugger y conectarlo cuando lleguemos a la parte que queramos depurar.
Espero que os sea útil. A mi me lo será en un futuro, pues no son pocas las veces que he hecho chapuzas por no saber que existía esta función.

Si tenéis más truquitos como este no dudéis en compartirlos con nosotros.
Gracias a helloandroid.com

Acerca del autor

Rafa Vázquez

Estudio Ingeniería Informática del Software en Sevilla. Me considero geek sin dinero, amante y desarrollador novato de Android. He creado algunas aplicaciones como SeviBus, TicTacDroide, Kill Bieber y Traductor Hoygan, si es que se puede llamar aplicaciones a estas dos últimas ;) Ganas de aprender más y más no me faltan, e intentaré compartir mis experiencias con vosotros en la medida de lo posible.