Techniki debugowania w czasie rzeczywistym

18

Nie ma nic lepszego niż procedura modyfikowania zmiennej, kompilowania kodu, który zajmuje kilka minut, wykonywania kodu, uświadomienia sobie, że poprawka była w niewłaściwym kierunku i powtarzania tego procesu od nowa.

Chciałbym rozpocząć interakcję z moją logiką gry w trakcie sesji. W jaki sposób sobie z tym poradziłeś?

Byłbym otwarty, aby usłyszeć rozwiązania dla iOS, C / C ++ i C # / XNA.

David McGraw
źródło

Odpowiedzi:

4

Integracja w pełni zinterpretowanego języka pozwala na bardzo, bardzo łatwe przepisywanie elementów gry w locie.

Python, Lua itp. Mogą być do tego wyraźnie wykorzystane. Przykładem może być Angel Engine .

Ładowanie na gorąco to kolejny element do sprawdzenia (w zasadzie zdarzenie jest uruchamiane informujące o zmianie zasobu - plik konfiguracyjny, element artystyczny itp. - i uruchamiasz go przez szereg kondycjonerów, które modyfikują go dla format końcowy przed zastąpieniem istniejącego nowym.

Pracowałem z silnikiem szybkiego prototypowania, który używał ładowania na gorąco i to była przyjemność.

AA Grapsas
źródło
2

Jeśli chodzi o C ++, C # i C # z XNA, Visual Studio ma doskonałe narzędzia do debugowania - wstrzymaj aplikację w czasie rzeczywistym w dowolnym punkcie kodu, zobacz wartości przypisane do zmiennych w dowolnym momencie, przeglądaj wywołania funkcji , analizuj stos połączeń i nie tylko. Ponadto narzędzia takie jak Pix i CLR Profiler sprawiają, że programowanie w językach DirectX (Pix) i CLR (CLR Profiler) jest świetne.

Ponadto jedną szczególnie użyteczną częścią pracy z grami jest to, że mamy ten gigantyczny obszar do pisania tekstu debugowania, grafiki itp. Wykresy wykorzystania pamięci w czasie rzeczywistym, liczba narysowanych obiektów / wierzchołków, liczba klatek na sekundę itp. Są typowymi elementami do rysowania na ekranie.

Sean James
źródło
1
Podczas gdy VS jest znakomitym narzędziem programistycznym, normalne debugowanie wymaga czasu - szukanie punktów przerwania, przechodzenie przez kod, zmienianie zmiennych, ponowne uruchamianie przepływu. To pytanie szuka natychmiastowego sposobu na przeniesienie komponentu interfejsu lub dostosowanie współczynnika ataku bossa itp.
David McGraw
2

W C / C ++ prostą sztuczką jest umieszczenie twojego dostrajania w zmiennej statycznej, wyzwolenie punktu przerwania, zmiana statyczności w debuggerze i pozostaje on trwały aż do wyjścia.


źródło
Niech jednak będzie zmienną statyczną wewnątrz funkcji. Jeśli jest to globalny statyczny program Visual Studio może nie być w stanie pokazać swojej wartości.
Kaj
2

Rejestrowanie HTTP jest ogromną pomocą i nie jest trudne do uruchomienia. Możesz nawet użyć silnika Google App jako szybkiego sposobu na uruchomienie tego. Dane są zawsze przydatne.

Skrypty i XML mogą być ponownie ładowane w locie i nie wymagają resetowania. Pozwól im upaść bez obniżania poziomu gry. Daje to dużą moc artystom, testerom i projektantom.

Menu debugowania w grze Proste menu debugowania w grze, które można spawnować jako dziecko i zamrażać grę za pomocą suwaków silnika i suwaków gry. Umożliwiając ci dostosowanie numerów kluczy w czasie wykonywania i być może wykonanie jednej lub dwóch funkcji debugowania lub zrzutów informacji.

Uwielbiam również gniazda ASYNC, jak wspomniano w odpowiedzi Davida

Łatwy w użyciu Twój zespół ds. Gier musi mieć możliwość dodawania tych narzędzi i korzystania z nich bardzo łatwo, w przeciwnym razie po prostu się nie przyzwyczają.

Kimau
źródło
2

Wiem, że Sean James już to powiedział . Ale poważnie, Visual Studio (w szczególności narzędzia do debugowania) jest do tego świetne.

W dzisiejszych czasach nie używam C ++, więc nie jestem pewien, jak dobrze mają one zastosowanie. Ale dla C # (w tym w C # Express) masz:

  • Edytuj i kontynuuj - gdzie możesz dokonać hurtowych zmian w logice gry.
  • Watch Okno - gdzie można zobaczyć i modyfikować zmienne z łatwością.

A to może zaskoczyć twój umysł (wysadziło moje, gdy się o tym dowiedziałem):

Okno Natychmiastowe jest w zasadzie trudne do znalezienia (znajduje się w menu Debugowanie / Windows).

Jedynym poważnym minusem korzystania z debugera Visual C # jest to, że nie lubi zmieniać constwartości. Więc zazwyczaj zmieniam swoje wartości związane z rozgrywką staticpodczas ich ulepszania.

(Również: posiadanie dwóch monitorów bardzo pomaga.)


Teraz muszę przyznać, że powyższa metoda polega na wstrzymaniu aplikacji - co może być niezadowalająco powolne w przypadku kilku szczególnie kłopotliwych rzeczy.

W tych rzadkich przypadkach to, co robię (w XNA), to po prostu włamać się do odrobiny kodu (prawdopodobnie używając Edycji i Kontynuuj, jak wyżej), aby pobrać Keyboard.GetState().IsKeyDown()(w rzeczywistości mam łatwiejsze do pisania opakowanie) i dostosować wartość przez naciśnięcia klawiszy. Coś bardziej skomplikowanego nie jest warte wysiłku.


W praktyce to, co zwykle uważam za znacznie ważniejsze, to wizualizacja (zamiast modyfikowania) wartości w czasie rzeczywistym. Do tego mam ładną małą klasę, która może buforować linie i tekst do narysowania na końcu ramki. Jest także przydatny do szybkiego prototypowania.

(I po raz kolejny miło jest móc „edytować i kontynuować” te wizualizacje w czasie wykonywania.)


(źródło: andrewrussell.net )
( stąd )

Obawiam się, że nie mam obecnie „miłego” źródła do opublikowania (może później). Ale to w zasadzie tylko lista linii (dla tej biblioteki okrągłych linii ) i ciągów (dla wbudowanego w XNA SpriteBatch). Po prostu zrób to public staticgdzieś i narysuj wszystko odpowiednią transformacją, aby wszystko pojawiło się w „przestrzeni świata” (a następnie wyczyść listy dla następnej klatki).

Andrew Russell
źródło
1

Pisanie prostego systemu refleksji dla C / C ++ jest dość trywialne. W ten sposób możesz przeglądać wszystkie zmienne w grze (czy to za pomocą narzędzia sieciowego, klawiatury czy joypada) i zmieniać je na zawartość twojego serca. To działa dla mnie, ale wszystkie powyższe odpowiedzi są jednakowo ważne.

Edytowano, aby dodać: Ten wątek dotyczy teraz poprawiania, a nie debugowania zgodnie z tytułem wątku.

Kaj
źródło
0

Jednym z rozwiązań, które widziałem w wielu studiach, jest zewnętrzna aplikacja do debugowania, która dołącza się do twojego programu za pomocą sieci. Ta aplikacja pokazuje określone zmienne narażone i pozwala edytować je w czasie rzeczywistym. Dodanie nowych zmiennych polega na dodaniu makr do kodu gry.

Początkowa konfiguracja makr po stronie gry, protokół serwer / klient (rozwiązania, które widziałem właśnie serializują xml tam iz powrotem) i pisanie klienta, jest duża. Jest to jednak niezwykle przydatne, zwłaszcza że korzystanie z sieci do komunikacji oznacza, że ​​możesz pracować na dowolnej platformie.

tenpn
źródło
0

Powiąż ładowanie i czytanie zmiennej w pliku tekstowym i uruchom ją za pomocą specjalnego skrótu klawiszowego lub polecenia z konsoli.


źródło