Tenga en cuenta que no debe olvidar el uso de simuladores, máquinas virtuales y grabadoras de hardware para implementar la ejecución inversa.
Otra solución para implementarlo es rastrear la ejecución en hardware físico, como lo hacen GreenHills y Lauterbach en sus depuradores basados en hardware. En función de este rastro fijo de la acción de cada instrucción, puede moverse a cualquier punto de la traza eliminando los efectos de cada instrucción sucesivamente. Tenga en cuenta que esto supone que puede rastrear todas las cosas que afectan el estado visible en el depurador.
Otra forma es utilizar un método de punto de control + re-ejecución, que VmWare Workstation 6.5 y Virtutech Simics 3.0 (y posterior) utilizan, y que parece venir con Visual Studio 2010. Aquí, utiliza un virtual máquina o un simulador para obtener un nivel de indirección en la ejecución de un sistema. Usted regularmente descarga todo el estado en el disco o la memoria, y luego confía en que el simulador pueda volver a ejecutar determinísticamente la misma ruta del programa.
Simplificado, funciona de esta manera: supongamos que está en el momento T en la ejecución de un sistema. Para ir al tiempo T-1, toma un punto de control del punto t < T, y luego ejecuta (T-t-1) ciclos para terminar un ciclo antes de donde estabas. Esto se puede hacer para que funcione muy bien, y se aplique incluso para cargas de trabajo que hacen IO de disco, consisten en código de nivel de núcleo y realizan el trabajo del controlador de dispositivo. La clave es tener un simulador que contenga todo el sistema de destino, con todos sus procesadores, dispositivos, memorias e IO. Consulte the gdb mailinglist y la discusión siguiente en la lista de distribución de gdb para obtener más detalles. Utilizo este enfoque con bastante regularidad para depurar código engañoso, especialmente en los controladores de dispositivos y las primeras botas del sistema operativo.
Otra fuente de información es un Virtutech white paper on checkpointing (que escribí, en la revelación completa).
Me imagino que podría llegar a funcionar con el almacenamiento de los deltas de estado en lugar de todo el estado, pero todavía parece que podría ser costoso. – spender
pregunta relacionada http://stackoverflow.com/questions/522619/bidirectional-or-reverse-debugging –
Guardar deltas puede funcionar muy bien, y es realmente necesario para una solución eficaz de sistema completo reversible. – jakobengblom2