2010-05-18 11 views
5

Ein historischer Debugger kann den Programmstatus (einschließlich der aktuellen Anweisung) in einen früheren Zustand zurückversetzen. Wie ist das in verwalteten oder nicht verwalteten Umgebungen möglich? Ich kann mir nicht vorstellen, dass der Debugger bei jedem Befehl einen Zustand des gesamten Systems aufnimmt.Wie funktioniert ein historischer Debugger?

+0

es hat einen eingebauten Chronometer. Die meisten Chronometer haben nur einen Getter, aber dieser hat auch einen Setter. Siehe S. 15 der Installationsanleitung - Installation des Mikrowurmlochs. – mdma

Antwort

4

Eine Möglichkeit besteht darin, die Quellen der Nichtdeterminierung im System aufzuzeichnen (E/A, Interrupts) und in verschiedenen Intervallen Zustands-Snapshots zu erstellen. Auf diese Weise können Sie "zurückspulen", indem Sie zu einem vorherigen Snapshot zurückkehren und mit der aufgezeichneten Nicht-Deterministik vorwärts spielen, bis Sie den gewünschten Punkt in der Vergangenheit treffen.

Zum Beispiel vorstellen, diese Timeline:

1 2   3  4 
| |   |  | 
  1. Programm
  2. Statusauszugs von historischen Debugger
  3. in der Zeit Der Punkt, an dem genommen startet der Benutzer
  4. Jetzt
  5. zurückzuspulen will

Angenommen, der Benutzer möchte t o Zurückspulen zu Punkt 3. Sie können dies durch Wiederherstellen des Systemzustands (z. (Speicher, Register) bis Punkt 2 und lassen das System normal laufen, bis Punkt 3 erreicht ist. Wenn Daten von der Platte, dem Netzwerk oder einer anderen nichtdeterministischen Quelle benötigt werden, kann der historische Debugger seine aufgezeichneten Informationen zur Bereitstellung der Daten verwenden . Für den Benutzer scheint es, dass der Zustand des Programms einfach zu Punkt 3 wiederhergestellt wurde.

Ich glaube, das ist eine vereinfachte Ansicht davon, wie VMWare's Replay Debugger funktioniert (siehe auch die tech talk).

+0

Interessante Idee, klingt vernünftig. Wissen Sie, ob einige der beliebten historischen Debugger diesen Ansatz tatsächlich verwenden? Kennen Sie andere Möglichkeiten, um dasselbe Ziel zu erreichen? – mafu

0

Wahrscheinlich nimmt eine Momentaufnahme des Zustands jedes Mal, aber nur behält die Deltas zwischen den Zuständen (natürlich ist es unmöglich, genau zu sagen, wie jede gegebene wirklich funktioniert, ohne an ihrem Code zu suchen).

2

Nun, am wichtigsten ist, dass sie keinen Schnappschuss um jede Anweisung nur an verschiedenen "Points of Interest" (zum Beispiel, wenn eine Ausnahme ausgelöst wird, wenn bestimmte Methoden aufgerufen werden, usw.). Zum Beispiel, Microsoft IntelliTrace (in VS2010) Snapshots beim Zugriff auf das Dateisystem und die Registrierung, Interaktionen mit WinForms UI und so weiter.

Zweitens Snapshot der gesamte Programmstatus. Wenn Sie beispielsweise auf eine Datei zugreifen, zeichnet IntelliTrace den Namen der Datei, die angeforderten Zugriffsberechtigungen usw. auf - Sie können jedoch nicht einfach zu diesem Punkt zurückkehren und den Status jeder einzelnen globalen Variablen betrachten.

Ich weiß nichts über andere historische Debugger, aber so funktioniert IntelliTrace sowieso in VS2010.

Verwandte Themen