Una buena idea cuando sea posible. Desafortunadamente, por lo general es prohibitivamente difícil hacer un seguimiento de la historia completa del estado de la máquina. Simplemente no puede etiquetar cada estructura de datos con el origen, y todo el estado de ese objeto. Es posible que pueda almacenar solo los eventos externos y así reproducir de dónde vino todo.
Algunos ejemplos:
me hicieron trabajar en un proyecto en el que era posible y que ayudaron inmensamente. Cuando nos acercábamos al envío y nos quedábamos sin errores para arreglar, teníamos nuestro juego en el modo "cero jugadores", donde la computadora se reproducía repetidamente durante toda la noche con todas las variaciones de personajes y escenarios. Si afirmaba, mostraría la clave aleatoria que inició el partido. Cuando veníamos a trabajar por la mañana escribíamos la tecla desde nuestra pantalla (usualmente había una) y la comenzamos de nuevo usando esa tecla. Luego, simplemente lo veríamos hasta que apareciera la afirmación, y lo rastrearíamos. Lo importante es que podríamos volver a crear todas las entradas originales que llevaron al error y volver a ejecutarlo tantas veces como quisiéramos, incluso después de recompilar (dentro de los límites ... el número de recuperaciones del generador de números aleatorios no se pudo cambiar , aunque teníamos un RNG separado para cosas que no eran juegos, como visual fx). Esto solo funcionó porque cada partida comenzó después de un reinicio en caliente y solo tomó una cantidad muy pequeña de datos como entrada.
He oído que Bungie usó un método similar para tratar de descubrir la mala geometría en sus niveles de Halo.Pusieron los kits de desarrollo a funcionar durante la noche en un modo especial donde el protagonista indestructible se movería y saltaría al azar. Por la mañana miraban y veían si se quedaba atrapado en la geometría en algún lugar donde no podía salir. Puede haber granadas involucradas, también.
En otro proyecto, realmente registramos toda la interacción del usuario con una marca de tiempo para poder reproducirla. Eso funciona bien si puedes, pero la mayoría de las personas tiene interacciones con un DB cambiante cuyo estado completo podría no almacenarse tan fácilmente.
Buen punto. También utilicé este enfoque "keep info around" para una herramienta de procesamiento, para poder rastrear los errores de entrada que causaban que la salida estuviera corrupta o simplemente fallara tarde (por ejemplo, línea de archivo de entrada donde supuestamente está el error). – steffenj
Mark, estaba leyendo esta respuesta y pensé: "He visto eso hecho antes". Luego vi tu nombre y me di cuenta de que habíamos trabajado juntos. – Nosredna