Eine gute Idee wo praktikabel. Leider ist es in der Regel schwierig, den Überblick über die gesamte Geschichte des Maschinenzustands zu behalten. Sie können einfach nicht jede Datenstruktur mit dem, wo Sie es bekommen haben, und den gesamten Zustand , dass Objekt. Vielleicht können Sie nur die externen Ereignisse speichern und auf diese Weise reproduzieren, woher alles kommt.
Einige Beispiele:
Ich habe die Arbeit an einem Projekt, bei dem es möglich war und es half immens. Als wir uns dem Versand näherten und keine Bugs mehr lösten, mussten wir unser Spiel im "Zero-Players-Modus" spielen, in dem der Computer sich die ganze Nacht über mit allen Variationen von Charakteren und Schauplätzen wiederholt. Wenn es aktiviert wurde, würde es den zufälligen Schlüssel anzeigen, der das Match gestartet hat. Wenn wir morgens zur Arbeit kamen, schrieben wir den Schlüssel von unserem Bildschirm herunter (normalerweise gab es einen) und starte ihn erneut mit diesem Schlüssel. Dann guckten wir es uns einfach an, bis die Behauptung aufkam, und spürten es auf. Das Wichtigste ist, dass wir alle ursprünglichen Eingaben, die zu dem Fehler geführt haben, neu erstellen und sie so oft wiederholen konnten, wie wir wollten, selbst nach der Neukompilierung (innerhalb der Grenzen ... konnte die Anzahl der Aufrufe aus dem Zufallszahlengenerator nicht geändert werden) , obwohl wir einen separaten RNG für Nicht-Spiel-Sachen wie Visual FX hatten). Dies funktionierte nur, weil jede Übereinstimmung nach einem Warmstart gestartet wurde und nur sehr wenige Daten als Eingabe verwendet wurden.
Ich habe gehört, dass Bungie eine ähnliche Methode verwendet, um zu versuchen, schlechte Geometrie in ihren Halo-Ebenen zu entdecken.Sie würden die Dev-Kits über Nacht in einem speziellen Modus laufen lassen, in dem der unzerstörbare Protagonist sich willkürlich bewegen und springen würde. Am Morgen würden sie nachsehen und sehen, ob er in der Geometrie an einer Stelle feststeckte, wo er nicht heraus konnte. Möglicherweise waren auch Granaten beteiligt.
Bei einem anderen Projekt haben wir tatsächlich alle Benutzerinteraktionen mit einem Zeitstempel protokolliert, so dass wir sie erneut abspielen konnten. Das funktioniert gut, wenn Sie können, aber die meisten Leute haben Interaktionen mit einer sich ändernden DB, deren gesamter Zustand möglicherweise nicht so leicht gespeichert wird.
Guter Punkt. Ich habe diese "keep info around" -Ansicht auch für ein Verarbeitungstool verwendet, so dass Fehler von Eingaben, die die Ausgabe beschädigten oder nur zu spät scheiterten, verfolgt werden konnten (z. B. Zeile der Eingabedatei, in der der Fehler angeblich enthalten ist). – steffenj
Mark, ich habe diese Antwort gelesen und dachte: "Das habe ich schon mal gesehen." Als ich deinen Namen sah, wurde mir klar, dass wir zusammen gearbeitet hatten. – Nosredna