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?
Antwort
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
| | | |
- Programm
- Statusauszugs von historischen Debugger
- in der Zeit Der Punkt, an dem genommen startet der Benutzer
- Jetzt 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).
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
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).
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.
- 1. Wie funktioniert ein Debugger?
- 2. Erlang Debugger funktioniert nicht
- 3. Ulme - historischer Wert eines Signals
- 4. Immunity Debugger - pvefindaddr funktioniert nicht
- 5. SQL Wiederherstellen historischer Daten aus dem Changelog
- 6. Programmatic API zum Herunterladen historischer Finanzberichte
- 7. Pflege historischer Daten in einer Shop-Datenbank
- 8. Ereignis-Trigger auf der Grundlage historischer Daten
- 9. Wie sorge ich am besten für die Speicherung historischer Daten?
- 10. Wie funktioniert ein Debugger wie GDB, um einen Haltepunkt über JTAG festzulegen?
- 11. ByeBug Debugger funktioniert nur einmal [Rails 4]
- 12. Debugger nicht funktioniert auf einmal in PyCharm
- 13. Webstorm Debugger Breakpoints funktioniert nicht in Nodejs
- 14. Wie Debugger Skript gibt
- 15. Wie Flash-Debugger aktivieren?
- 16. Wie Debugger Anfänger Code
- 17. Debugger Fehler
- 18. Was sind in Subversion bewährte Methoden zum Ändern historischer Dateien?
- 19. Ich setze sbcl aus dem Debugger ein
- 20. Wie Starten von IE8-Debugger mit Debugger; Befehl
- 21. Welche Funktionen hätte ein * perfekter * Python-Debugger?
- 22. Wie brechen Sie den Debugger aus Python-Quellcode ein?
- 23. Wie sehe ich ein Objekt in Xcode Debugger?
- 24. Wie wird ein Debugger für AEM oder CQ eingerichtet?
- 25. Erstellen Sie einen Matlab-Debugger-Haltepunkt und geben Sie den Debugger im .m-Dateicode ein
- 26. Wie funktioniert ein Geodatenindex?
- 27. Wie funktioniert ein UpdatePanel?
- 28. Wie kann ich den Firefox-Debugger aktivieren?
- 29. Wo finde ich Beispielalgorithmen zur Analyse historischer Aktienkurse?
- 30. Debugger plötzlich funktioniert nicht mehr im Webstorm-Projekt
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