MonoDevelop es el ambiente de desarrollo integrado (IDE) proporcionado con Unity. Un IDE combina la operación familiar de un editor de texto con características adicionales para depurar y gestionar otras tareas de proyecto. El editor de texto no será cubierto aquí ya que es bastante intuitivo, pero la integración del editor y el depurador con Unity está descrito abajo.
MonoDevelop es instalado por defecto con Unity, aunque ahí hay una opción para excluirlo en las Ventanas de instalación. Usted debería revisar que MonoDevelop esté configurado como el editor de script externo en Preferences (menu: Unity > Preferences y luego seleccione el panel External Tools). Con esta opción activada, Unity va a lanzar MonoDevelop y lo utilizará como el editor predeterminado para todos los archivos de script.
Para habilitar la depuración source level (nivel fuente) de MonoDevelop (mire abajo por detalles) primero tiene que asegurarse que la opción Editor Attaching esté habilitada en las Preferencias en el panel de External Tools. Luego, debe sincronizar el proyecto de Unity con el proyecto de MonoDevelop (menú: Assets > Open C# Project). También, asegúrese de que las opciones Development Build y Script Debugging estén habilitadas en las Build Settings para su plataforma destino (menú: File > Build Settings).
Justo antes de comenzar una sesión de depuración, seleccione el objetivo que usted desea depurar de la lista de objetivos alado del botón play (Unity Editor, OSX Player, etc.). Usted puede también seleccionar “Attach To Process”, esto va a mostrar la lista completa de procesos que se pueden depurar en Unity.
Con estos pasos completados, usted está listo para comenzar a depurar sus scripts de Unity al hacer click en el botón play.
Los archivos actuales open source son mostrados como pestañas en MonoDevelop y pueden ser editados ahí con las características de un editor de texto estándar. Sin embargo, también hay una breakpoint bar gris a la izquierda del panel del editor. Al hacer click en esta barra va a agregar un tal llamado marcador breakpoint a lado de la linea de código.
Agregando un breakpoint a la linea instruye a Unity a pausar la ejecución del script justo antes de que alcance esa linea durante el modo de Reproducción. Cuando el script se ha “congelado” como esto, usted puede utilizar el depurador para determinar exactamente lo que el script está haciendo.
Información acerca del estado de ejecución es mostrado en las pestañas al final de la ventana MonoDevelop cuando la ejecución es pausada en el breakpoint. Probablemente la más importante de estas es la pestaña Locals.
Esto muestra los valores de variables locales en la función que actualmente se está ejecutando. (Una variable pseudo-local llamada “this” es automáticamente disponible en cada función sin la necesidad de ser explícitamente definida; es una referencia a la instancia actual de script por lo que todas las variables definidas en el script pueden ser accedidas vía “this”.) Usted puede utilizar breakpoints en combinación con la pestaña Locals para obtener un efecto similar a agregar declaraciones print
a su código - usted puede interrogar los valores de las variables en cualquier punto que usted quiera. No obstante, usted puede también editar los valores de la variables en la pestaña Locals. Esto puede ser de gran ayuda cuando usted encuentre una variable configurada incorrectamente y usted quisiera ver si este problema desaparece cuando el valor es configurado cómo debería.
Una característica adicional y útil de MonoDevelop es single stepping. Cuando la ejecución es pausada en un breakpoint, una barra de herramientas de depuración se vuelven disponible en la porción superior de la ventana de MonoDevelop:-
Los primeros cuatro botones son conocidos como Continue, Step Over, Step In y Step Out y pueden también ser accedidos como comandos en el menú Run. Continue resume la ejecución hasta que el nuevo breakpoint sea encontrado. Step Over y Step In ambos ejecutan una linea de código a la vez. La diferencia entre los dos es que Step Over ejecuta cualquier llamado de función dentro de la linea todo a la vez, mientras que Step In permite la ejecución paso a paso a continuar en la función. Debido a que es común utilizar Step In accidentalmente en una función que es conocida como correcta, Step Out continua la ejecución hasta final de la función actual y luego nuevamente se pausa en el código que originalmente lo llamo.
Una descripción detallada de las técnicas de source level debugging no es apropiado aquí, pero hay varios libros y recursos web que ofrecen sabiduría en el tema. Adicionalmente, un poco de experimentación lo ayudará a tener un sentimiento de poder de las técnicas y cómo usted puede utilizarlas para darle un seguimiento a los tipos de bugs más comunes.