2010-05-18 8 views
5

Un depurador histórico puede revertir el estado del programa (incluidas las instrucciones actuales) a un estado anterior. ¿Cómo es esto posible en entornos administrados o no administrados? No me puedo imaginar que el depurador tome una imagen del estado de todo el sistema en cada instrucción.¿Cómo funciona un depurador histórico?

+0

tiene un cronómetro incorporado. La mayoría de los cronómetros tienen solo un getter, pero este también tiene un setter. Ver p. 15 de la guía de instalación - instalación del agujero de gusano micro. – mdma

Respuesta

4

Una forma de hacerlo es registrar las fuentes de no determinismo en el sistema (E/S, interrupciones) y tomar instantáneas de estado en varios intervalos. De esta manera, puede "rebobinar" volviendo a una instantánea anterior y reproduciendo usando el no determinismo grabado hasta que llegue al punto deseado en el pasado.

Por ejemplo, imagina esta línea de tiempo:

1 2   3  4 
| |   |  | 
  1. Programa inicia
  2. instantánea Estado tomada por depurador histórica
  3. El punto en el tiempo en que el usuario desea rebobinar
  4. Ahora

Supongamos que el usuario quiere t o rebobinar al punto 3. Puede hacerlo restaurando el estado del sistema (p. memoria, registros) al punto 2 y dejar que el sistema se ejecute como de costumbre hasta que llegue al punto 3. Cuando se necesitan datos del disco, la red o alguna otra fuente no determinista, el depurador histórico puede usar su información registrada para proporcionar los datos . Para el usuario, parece que el estado del programa simplemente se restauró al punto 3.

Creo que esta es una vista simplificada de cómo funciona VMWare's Replay Debugger (consulte también tech talk).

+0

Idea interesante, parece razonable. ¿Sabes si alguno de los depuradores históricos populares realmente usa este enfoque? ¿Conoces otras formas que están en uso para lograr el mismo objetivo? – mafu

0

Probablemente toma una instantánea del estado cada vez, pero sólo conserva los deltas entre los estados (por supuesto, es imposible decir exactamente cómo la una dada realmente funciona sin mirar a su código).

2

Bueno, lo más importante es que no capturan en cada instrucción solo en varios "puntos de interés" (por ejemplo, cuando se lanza una excepción, cuando se llaman ciertos métodos, etc.). Por ejemplo, las instantáneas de IntelliTrace de Microsoft (en VS2010) sobre el acceso al sistema de archivos y el registro, las interacciones con la interfaz de usuario de WinForms, etc.

En segundo lugar, no incluye la instantánea todo el estado del programa. Por ejemplo, cuando accede a un archivo, IntelliTrace registra el nombre del archivo, los permisos de acceso que solicitó, etc., pero no puede volver a ese punto y observar el estado de cada variable global.

No conozco otros depuradores históricos, pero así es como IntelliTrace funciona en VS2010, de todos modos.

Cuestiones relacionadas