Técnicas de depuración en tiempo real

18

No hay nada como la rutina de ajustar una variable, compilar código que toma unos minutos, ejecutar el código, darse cuenta de que su ajuste estaba en la dirección incorrecta y repetir el proceso nuevamente.

Me gustaría comenzar a interactuar con la lógica de mi juego mientras hay una sesión en curso. ¿Cuáles son algunas de las formas en que has manejado esto?

Estaría abierto a escuchar soluciones para iOS, C / C ++ y C # / XNA.

David McGraw
fuente

Respuestas:

4

La integración de un lenguaje totalmente interpretado puede permitirle reescribir elementos del juego muy, muy fácilmente sobre la marcha.

Python, Lua, etc. se pueden utilizar expresamente para esto. Angel Engine probablemente puede servir de ejemplo.

La carga en caliente es otro elemento para verificar (básicamente, un evento se dispara diciéndole que un activo ha cambiado: un archivo de configuración, un elemento artístico, etc.) y lo ejecuta a través de una serie de acondicionadores que lo modifican para formato final antes de reemplazar el existente con el nuevo.

He trabajado con un motor de creación rápida de prototipos que utilizaba carga en caliente y fue un placer.

AA Grapsas
fuente
2

Bueno, en lo que respecta a C ++, C # y C # con XNA, Visual Studio tiene excelentes herramientas de depuración: pause la aplicación en tiempo real en cualquier punto del código, vea los valores asignados a las variables en cualquier momento, recorra las llamadas a funciones , analizar la pila de llamadas y más. Además, herramientas como Pix y CLR Profiler hacen que el desarrollo con DirectX (Pix) y los lenguajes basados ​​en CLR (CLR Profiler) sean excelentes.

Además, una parte especialmente útil de trabajar con juegos es que tenemos esta área gigante para escribir textos de depuración, gráficos, etc. Los gráficos en tiempo real del uso de la memoria, el número de objetos / vértices dibujados, la velocidad de fotogramas, etc. son cosas comunes para dibujar en la pantalla.

Sean James
fuente
1
Si bien VS es una herramienta de desarrollo sobresaliente, la depuración normal lleva tiempo: buscar puntos de interrupción, recorrer el código, cambiar las variables y reiniciar el flujo. Esta pregunta busca una forma inmediata de hacer cosas como mover un componente de la interfaz, o ajustar la relación de ataque de un jefe, etc.
David McGraw
2

En C / C ++, un simple truco es poner su ajuste en una variable estática, activar un punto de interrupción, cambiar la estática en el depurador y permanece persistente hasta la salida.


fuente
Sin embargo, conviértalo en una variable estática dentro de una función. Si se trata de un estudio visual estático global, es posible que no pueda mostrar su valor.
Kaj
2

El registro HTTP es de gran ayuda y no es difícil de poner en funcionamiento. Incluso puede usar el motor de aplicaciones de Google como una forma rápida de hacer que esto funcione. Los datos siempre son útiles.

Scripts y XML, estos se pueden volver a cargar sobre la marcha y no requieren reinicio. Permítales fallar sin derribar el juego. Esto le da mucho poder a artistas, probadores y diseñadores.

Menú de depuración en el juego Un menú simple de depuración en el juego que puedes generar de niño y congelar el juego con controles deslizantes del motor y controles deslizantes del juego. Permitiéndole ajustar números clave en tiempo de ejecución y quizás realizar una o dos funciones de depuración o volcados de información.

También me encantan los enchufes ASYNC como se menciona en la respuesta de David

Fácil de usar Su equipo de juegos debe poder agregar a estas herramientas y usarlas muy fácilmente, o simplemente no se usarán.

Kimau
fuente
2

Sé que Sean James ya lo dijo . Pero en serio, Visual Studio (específicamente las herramientas de depuración) es excelente para esto.

No uso mucho C ++ en estos días, así que no estoy seguro de qué tan bien se aplican allí. Pero para C # (incluido en C # Express) tiene:

Y esto podría sorprenderlo (me sopló el mío cuando me enteré):

La Ventana Inmediata es realmente difícil de encontrar (está en el menú Depurar / Windows).

El único inconveniente importante de usar el depurador de Visual C # es que no le gusta cambiar los constvalores. Por lo general, solo hago mis valores relacionados con el juego staticmientras los estoy ajustando.

(Además: tener dos monitores ayuda mucho).


Ahora debo admitir que el método anterior implica pausar su aplicación, lo que puede ser muy lento para algunas cosas particularmente complicadas.

En estas raras ocasiones, lo que hago (en XNA) es simplemente hackear un poco de código (probablemente usando Editar y Continuar, como se indicó anteriormente) para capturar Keyboard.GetState().IsKeyDown()(en realidad tengo un contenedor más fácil de escribir para esto) y ajustar el valor por pulsaciones de teclas. Cualquier cosa más complicada no vale el esfuerzo.


En la práctica, lo que generalmente encuentro mucho más importante es poder visualizar (en lugar de modificar) valores en tiempo real. Para esto, tengo una pequeña clase agradable que puede almacenar líneas y texto para dibujar al final del marco. También es útil para la creación rápida de prototipos.

(Y, una vez más, es bueno poder "Editar y continuar" estas visualizaciones en tiempo de ejecución).


(fuente: andrewrussell.net )
( desde aquí )

Me temo que no tengo una fuente "agradable" para publicar en este momento (tal vez más tarde). Pero básicamente es solo una lista de líneas (para esta biblioteca de líneas redondas ) y cadenas (para SpriteBatch incorporado de XNA). Simplemente hágalo en public staticalgún lugar y dibuje todo con una transformación adecuada para que todo aparezca en el "espacio mundial" (y luego borre las listas para el siguiente cuadro).

Andrew Russell
fuente
1

Escribir un sistema de reflexión simple para C / C ++ es bastante trivial. De esta manera, puede navegar a través de todas sus variables en el juego (ya sea con una herramienta de red, teclado o joypad) y cambiarlas al contenido de su corazón. A mí me funciona, pero todas las respuestas anteriores son igualmente válidas.

Editado para agregar: este hilo ahora trata de ajustes, no de depuración según el título del hilo.

Kaj
fuente
0

Una solución que he visto en varios estudios es una aplicación de depuración externa que se conecta a su programa usando la red. Esta aplicación muestra variables expuestas específicas y le permite editarlas en tiempo real. Agregar nuevas variables es una cuestión de agregar algunas macros al código del juego.

La configuración inicial de las macros del lado del juego, el protocolo servidor / cliente (las soluciones que he visto solo serializan xml de un lado a otro), y la escritura del cliente, es grande. Sin embargo, es extremadamente útil, especialmente porque usar la red para la comunicación significa que puede trabajar en cualquier plataforma.

tenpn
fuente
0

Vincula la carga y la lectura de la variable a un archivo de texto y enciéndelo usando una combinación de teclas específica o un comando de la consola.


fuente