Depuración de Complemento

Cuando los errores en el código de su complemento son difíciles de identificar, está cansado de volver a compilar después de cada simple cambio y las salidas del registrador saturan su código, la depuración puede ser muy tediosa. Así que, esta sección explicará como configurar su plugin para utilizar las capacidades de depuración de Java.

Preparación de su espacio de trabajo

Ya que ejecutaremos ambos, Sponge y su complemento desde su IDE, necesitará importar ya sea SpongeForge o SpongeVanilla, dependiendo cual quiera utilizar, como un proyecto en su espacio de trabajo. Las instrucciones para hacerlo se encuentran en la respectiva página de GitHub de proyectos. Siga esas instrucciones cuidadosamente antes de continuar aquí.

Ahora necesita asegurarse que su proyecto de plugin es visible para el proyecto SpongeForge/SpongeVanilla que acaba de crear. Los pasos necesarios dependen de su IDE.

IntelliJ IDEA

En IntelliJ, cada proyecto tiene su propio espacio de trabajo o espacios de trabajo. Para hacer su proyecto visible para el proyecto Sponge(Vanilla), necesita ser un Módulo. Suponiendo que ya creó su proyecto como se describe en Configuración de IntelliJ IDEA, impórtelo siguiendo los siguientes pasos.

  • Abrir el proyecto SpongeVanilla/SpongeForge.
  • Haga clic en Archivo, seguido de Nuevo, luego Módulo de Fuentes Existentes....
  • Navegue hasta el directorio de su proyecto de plugin.
    • Si está utilizando Gradle, selecciones el archivo build.gradle, en el siguiente diálogo marque``Use auto-import`` y confirme.
    • De lo contrario, solo seleccione el directorio completo y haga clic en Finalizar.
  • Haga clic en Finalizar.

Truco

Si no ha creado todavía su plugin, haga clic en Módulo... en lugar de Módulo de Fuentes Existentes..., entonces cree su proyecto en el siguiente diálogo.

Eclipse

Solo cree su proyecto como se describe aquí Configuración de Eclipse. Siempre que esté en el mismo espacio de trabajo que su proyecto SpongeVanilla/SpongeForge, será visible.

Agregar el Plugin a la ruta de clase de Sponge

La idea detrás de esto es que lanzaremos Sponge desde su IDE, como es normal. Sin embargo, la diferencia es que agregaremos su plugin a la ruta de clase. Ya que Sponge por defecto carga todos los complementos encontrados en la ruta de escape, agregar el proyecto de plugin a la ruta de clase de Sponge lo liberará de la necesidad de volver a compilar y copiar el archivo de artefactos en el directorio de su servidor después de cada cambio.

En primer lugar, necesita asegurarse que tiene establecido su Configuración(es) de Ejecución/Depuración apropiadamente, como se muestra en Sponge README.md

Luego necesitará editar esa Configuración de Ejecución/Depuración para que se incluya su proyecto en la ruta de clase. Como hacerlo, depende otra vez de su IDE:

IntelliJ IDEA

  • Abra su Estructura del Proyecto.
    • Haga clic en Archivo, seguido de Estructura del Proyecto....
    • O, haga clic en el ícono Estructura del Proyecto, en la esquina superior derecha del IDE, al lado del ícono Buscar.
  • Haga clic en Módulos. Expanda el grupo SpongeForge o SpongeVanilla (dependiendo de su elección).
  • Asegúrese de que SpongeForge_main o SpongeVanilla_main esté seleccionado.
  • En la columna derecha, seleccione la pestaña Dependencias.
  • Haga clic en el símbolo + (Agregar) en el fondo de la columan, y seleccione Módulo de Dependencia.
  • Selecciones yourplugin_main.
  • NO marque la opción Exportar en el módulo, después de que se agregue a la lista.

Advertencia

Due to a bug in IntelliJ (IDEA-194641), any dependencies that your plugin has (e.g. the Kotlin standard library, or Gson) will not be added to the classpath using the above method. This results in a ClassNotFoundException when your plugin tries to access one of these classes, even though it successfully compiled against that class.

This issue only affects running your plugin from IntelliJ as a module. Your final built plugin jar will run normally in both IntelliJ and a production server.

If your plugin has external dependencies, you’ll need to follow these steps in order to run it directly from IntelliJ:

  • Create a new Java module with File -> New -> Module.... Name it SpongeForgeContainer.
  • Open the module settings for SpongeForgeContainer as described above
  • In the dependency settings for SpongeForgeContainer, add a module dependency on SpongeForge_main
  • Edit your server run configuration. Change Use classpath of module: from SpongeForge_main to SpongeForgeContainer

You can leave all of your settings unchanged, including SpongeForge_main’s dependency on your plugin module. Now, all of your plugin’s dependencies should be added to the classpath when you run the server.

Eclipse

  • Encuentre su Configuración de Ejecución/Depuración
    • Haga clic en Ejecutar, seguido de Configuraciones de Ejecución...
    • O, haga clic en la flecha desplegable al lado de los íconos Ejecución/Depuración y luego Configuraciones de Ejecución... o Configuraciones de Depuración..., respectivamente.
  • Seleccione su Configuración de Ejecución/Depuración para Sponge (Servidor) en el lado izquierdo.
  • Cambia a la pestaña Classpath.
  • Seleccione Entradas de Usuario, seguido del botón Agregar Proyectos....
  • Seleccione el Proyecto apropiado para su Plugin.
  • Haga clic en el botón Aceptar.
  • Haga clic en el botón Aplicar en la esquina inferior izquierda.

Ejecución de la Configuración

After you’ve followed the previous steps, you should be ready to start debugging. If you start your server from your IDE, its working directory will be the run directory in your SpongeForge/SpongeVanilla project. All the files usually created by a server (worlds, configs etc.) will be stored in that run directory and persist over multiple runs of your local test server, just as if you manually copied a server .jar to the run directory and started it from there.

IntelliJ IDEA

En lugar de presionar la flecha verde que señala la derecha para ejecutar su configuración de Ejecución/Depuración, haga clic en el ícono verde a la derecha, Depurar.

Eclipse

Rather than pressing the green right-pointing arrow to run your Run/Debug configuration, click the drop-down arrow of the Debug icon (the one displaying a bug) and click your Test (Server) configuration. If it doesn’t appear in the drop-down menu, click Debug Configurations. Select Test (Server) configuration and hit the Debug button on the bottom left.

Uso del Depurador

Ahora que su servidor (y su plugin) están ejecutándose en el Depurador, puede hacer uso de las características que contiene. Los utilizados principalmente se explican brevemente a continuación, aunque no son características de Sponge, sino del Depurador de Java su IDE los utiliza.

Puntos de Ruptura

Los puntos de ruptura son una herramienta útil para observar de cerca al código. Un punto de ruptura, puede ser establecido en el comienzo de un línea de código o una función. Cuando se alcanza un punto de ruptura se detendrá la ejecución del código y su IDE abrirá una vista que le permitirá inspeccionar el contenido de todas las variables en ámbito actual. La ejecución del código no se reanudará a menos que presiones el botón correspondiente en la vista de depuración de su IDE.

Los puntos de ruptura pueden también ser agregados, removidos o temporalmente deshabilitados mientras la depuración está en proceso.

Truco

Una vez un tick de servidor único toma más que una cantidad determinada de tiempo, el watchdog considerará que el servidor se ha bloqueado y lo cerrará por la fuerza. Cuando trabaja con puntos de ruptura esto puede ocurrir, así que es recomendado que edite sus entornos de pruebas del archivo server.properties y establezca el valor de max-tick-time en un valore muy largo (la cantidad de milisegundos que puede tomar un tick) o -1 (para deshabilitar completamente el Watchdog).

IntelliJ IDEA

Para agregar o remover un punto de ruptura, solo haga clic izquierso en el espacio en blanco justo a la izquierda de su editor.

Alternativamente, coloque su cursor en la línea donde quiere agregar o remover el punto de ruptura y después haga clic en Ejecutar seguido de Toggle Line Breakpoint.

Eclipse

Para agregar o remover un punto de ruptura, solo haga clic derecho en el espacio en blanco justo a la izquierda de su editor y haga clic en Toggle Breakpoint.

Alternativamente, coloque su cursor en la línea donde quiere agregar o remover el punto de ruptura y después haga clic en Ejecutar seguido de Toggle Breakpoint.

Código Hotswapping

La otra gran hazaña del depurador es que no tendrá que reiniciar su servidor por cada cambio pequeño que haga, gracias al código hotswapping. Esto significa que puede solo recompilar partes de su código mientras se está ejecutando en el depurador. Sin embargo, hay un par de limitaciones, las más importantes son:

  • No puede crear o remover métodos.

    • Los cambios en los método están limitados al código dentro del método. No puede modificar su firma (que significa su nombre, tipo retorno y tipos de parámetros)
  • No puede remover clases.

    • No puede modificar el nombre de una clase, una superclase o la lista de interfaces que implementa.
    • Puede agregar clases. Sin embargo, una vez que ha sido compilada y hotswapped, la clase sigue las reglas anteriores.

Puede probar esta funcionalidad: Introduzca un comando simple para su plugin que solo escriba una palabra, como Sponge. Luego guárdelo e inicie el servidor como se describe anteriormente. Ejecute el comando. Saldrá Sponge. Ahora cambie el comando para escribir una palabra diferente en la consola, guarde el archivo. Después de un cambio, haga lo siguiente para enrutar los cambios al programa en ejecución:

IntelliJ IDEA

  • Abra el menú Ejecutar, de la parte superior del IDE.
  • Debajo del primer quiebre de categoría, haga clic en Recargar Clases Modificadas.

Eclipse

No se necesita ninguna acción. Tan pronto como guarde el archivo, será recompilado y automáticamente hotswapped con la depuración actual en ejecución. A menos que cambie este comportamiento predeterminado particular, no tendrá que desencadenar un hotswap manual.