Dobry pomysł tam, gdzie to możliwe. Niestety, zwykle trudno jest śledzić całą historię stanu maszyny. Po prostu nie można oznaczyć każdej struktury danych, skąd ją otrzymałeś, i cały obiekt , który jest obiektem. Możesz być w stanie przechowywać tylko wydarzenia zewnętrzne i odtwarzać w ten sposób, skąd pochodzi.
Kilka przykładów:
zrobiłem pracę nad projektem, gdzie było to możliwe i to pomogło ogromnie. Kiedy zbliżaliśmy się do wysyłki, a skończyły się błędy do naprawienia, graliśmy w "tryb zero graczy", w którym komputer wielokrotnie grałby całą noc ze wszystkimi odmianami postaci i ustawień regionalnych. Gdyby potwierdził, wyświetliłby losowy klucz, który rozpoczął mecz. Kiedy przyszliśmy rano do pracy, zapisywaliśmy klucz z ekranu (zwykle taki był) i uruchamialiśmy go ponownie, używając tego klucza. Potem obejrzymy go, dopóki nie pojawi się twierdzenie, i wyśledzimy. Ważne jest to, że możemy odtworzyć wszystkie oryginalne dane wejściowe, które doprowadziły do błędu, i ponownie uruchomić go tyle razy, ile chcieliśmy, nawet po ponownych kompilacjach (w granicach ... liczba pobrań z generatora liczb losowych nie mogła zostać zmieniona , chociaż mieliśmy oddzielny RNG na rzeczy niezwiązane z grą, takie jak visual fx). To zadziałało, ponieważ każdy mecz rozpoczął się po ciepłym ponownym uruchomieniu komputera i jako dane wejściowe pobierał tylko bardzo małą ilość danych.
Słyszałem, że Bungie użył podobnej metody, aby odkryć złą geometrię w ich poziomach Halo.Postawili zestawy dev z dnia na dzień w specjalnym trybie, w którym niezniszczalny protagonista poruszałby się i skakał losowo. Rano będą patrzeć i zobaczyć, czy utknął w geometrii w jakimś miejscu, gdzie nie mógł się wydostać. W grę mogły wchodzić granaty.
W innym projekcie zarejestrowaliśmy wszystkie interakcje użytkownika z sygnaturą czasową, abyśmy mogli je odtworzyć. Działa to świetnie, jeśli możesz, ale większość ludzi ma interakcje ze zmienną bazą danych, której cały stan może nie być tak łatwo zapisany.
Dobra uwaga. Używałem także tego podejścia "przechowuj informacje dookoła" dla narzędzia przetwarzania, aby można było śledzić błędy z wejścia, które spowodowało uszkodzenie pliku wyjściowego lub po prostu spóźnić się (np. Linia pliku wejściowego, w którym rzekomo znajduje się błąd). – steffenj
Mark, czytałem tę odpowiedź i pomyślałem: "Widziałem już to wcześniej". Wtedy zobaczyłem twoje imię. Zdałem sobie sprawę, że pracowaliśmy razem. – Nosredna