Dein Spiel stürzt ab – aber warum? Sentry kann dir Hinweise auf die Problemstelle liefern, während Perforce nachvollziehbar macht, welche Änderungen an deinem Projekt erfolgt sind. Zusammengenommen entsteht ein Debugging-Workflow, der dich vom ersten Crash bis zur Überprüfung des veränderten Programmcodes führt.
Was bedeutet Debugging?
Debugging bezeichnet die Suche, Analyse und Behebung von Fehlern in einem Programm. Entwickelst du ein Spiel, begegnen dir solche Fehler während des gesamten Projekts. Manche erkennst du sofort, andere treten nur unter bestimmten Bedingungen oder erst beim Testen einer Spielversion auf.
Besonders wenig hilfreich ist zunächst ein Absturz. Dein Spiel beendet sich unerwartet und du weißt lediglich: Irgendetwas ist schiefgegangen. Du musst deshalb herausfinden, was unmittelbar vor dem Absturz passiert ist und welcher Teil deines Spiels daran beteiligt war. Dabei kann Sentry helfen.
Was ist Sentry?
Sentry ist eine Plattform zur Überwachung und Analyse von Softwarefehlern. Du kannst sie in dein Projekt integrieren und damit technische Informationen über auftretende Fehler und Abstürze erfassen.
Stürzt dein Spiel ab, bekommst du dadurch nicht nur die Meldung, dass ein Problem aufgetreten ist. Sentry kann dir zusätzliche Informationen liefern, die dir bei der Suche nach der Ursache helfen. Dazu gehören beispielsweise Fehlermeldungen, Logs und Stack Traces.
Ein Log ist eine Aufzeichnung von Ereignissen innerhalb deines Programms. Dein Spiel kann beispielsweise protokollieren, dass ein Level geladen, eine bestimmte Aktion ausgeführt oder eine Datei geöffnet wurde. Tritt anschließend ein Fehler auf, kannst du anhand solcher Einträge nachvollziehen, was davor passiert ist.
Was ist ein Stack Trace?
Ein Stack Trace zeigt dir, welche Programmfunktionen zum Zeitpunkt eines Fehlers aufgerufen wurden. Dadurch bekommst du einen Hinweis darauf, wo du mit der Fehlersuche beginnen kannst.
Angenommen, dein Spieler steht vor einer verschlossenen Tür. Beim Interagieren ruft dein Spiel zunächst eine Funktion für die Interaktion auf. Danach prüft eine weitere Funktion, ob der Spieler einen Schlüssel besitzt. Anschließend soll eine Funktion die Tür öffnen. Genau dabei stürzt das Spiel ab.
Der Stack Trace kann dir den Ablauf sinngemäß so zeigen: Interaktion mit der Tür → Schlüssel prüfen → Tür öffnen → Fehler.
Du bekommst damit wesentlich mehr Informationen als durch die Meldung „Mein Spiel ist abgestürzt“. Der Stack Trace beweist allerdings noch nicht automatisch, welche Codezeile die Ursache enthält. Er grenzt zunächst den Bereich ein, den du untersuchen solltest.
Was ist Perforce?
Hast du eine mögliche Problemstelle gefunden, entsteht die nächste Frage: Was wurde dort eigentlich verändert?
Hier kommt Perforce ins Spiel. Perforce ist ein Unternehmen, das Werkzeuge für die Software- und Spieleentwicklung anbietet. Für diesen Arbeitsablauf ist vor allem Perforce P4 interessant. P4 dient unter anderem als Versionsverwaltung für dein Entwicklungsprojekt.
Was ist eine Versionsverwaltung?
Während du dein Spiel entwickelst, veränderst du ständig Dateien. Du programmierst neue Funktionen, korrigierst Fehler oder passt vorhandenen Code an. In einem Team arbeiten möglicherweise mehrere Personen gleichzeitig am selben Projekt.
Eine Versionsverwaltung zeichnet diese Veränderungen nachvollziehbar auf. Du kannst später feststellen, welche Datei verändert wurde, wann die Änderung erfolgte und wer sie vorgenommen hat.
Stell dir vor, dein Spiel funktioniert am Montag problemlos. Am Dienstag veränderst du die Programmierung einer Tür. Danach stürzt das Spiel beim Öffnen dieser Tür ab. Mit der Versionsverwaltung kannst du untersuchen, was sich zwischen dem funktionierenden und dem fehlerhaften Entwicklungsstand geändert hat.
Was ist ein P4-Depot?
Perforce bezeichnet den zentralen Speicherort für versionierte Projektdateien als Depot. Dort liegen die Dateien, deren Änderungen P4 verfolgt. Du kannst dir ein Depot vereinfacht als zentral verwalteten Projektbestand vorstellen. Von dort holst du Dateien in deinen eigenen Arbeitsbereich und überträgst deine Änderungen anschließend wieder zurück.
Was ist eine Changelist?
Bei Perforce begegnet dir der Begriff Changelist. Übersetzt bedeutet er ungefähr „Änderungsliste“.
Angenommen, du veränderst mehrere Dateien, damit sich eine Tür automatisch öffnet, sobald dein Spieler den passenden Schlüssel besitzt. Diese Änderungen gehören zur selben Aufgabe. In Perforce kannst du sie gemeinsam in einer Changelist speichern beziehungsweise einreichen.
Die Changelist dokumentiert damit: Diese Änderungen gehören zusammen und wurden gemeinsam in das Projekt übernommen. Sie erhält eine eindeutige Nummer. Dadurch kannst du später genau nachvollziehen, welche zusammengehörenden Änderungen vorgenommen wurden.
Was ist ein Build?
Jetzt befindet sich deine Änderung zwar im Entwicklungsprojekt, daraus muss aber noch eine Version entstehen, die du tatsächlich starten und testen kannst. Hier begegnet dir der Begriff Build.
Dein Spiel besteht während der Entwicklung aus Programmcode, Grafiken, Sounds, Einstellungen und weiteren Bestandteilen. Beim Build-Prozess erzeugst du daraus eine lauffähige Version deines Spiels. Auch diese entstandene Version bezeichnet man häufig als Build.
Während der Entwicklung kannst du zahlreiche Builds erzeugen. Sie müssen nicht öffentlich erscheinen. Du könntest beispielsweise nacheinander Build 120, Build 121 und Build 122 erstellen.
Funktioniert Build 120 problemlos und Build 121 stürzt plötzlich ab, bekommst du einen wichtigen Anhaltspunkt. Du kannst untersuchen, welche Änderungen zwischen den beiden Builds in dein Spiel gelangt sind.
Was ist ein Crash?
Ein Crash ist ein Fehler, durch den sich dein Spiel beziehungsweise Programm unerwartet beendet. Der Begriff bezeichnet also den Absturz selbst.
Ein Crash sagt dir zunächst noch nicht, warum das Spiel abgestürzt ist. Genau deshalb brauchst du weitere Informationen wie Logs und Stack Traces.
So arbeiten Sentry und Perforce zusammen
Sentry hilft dir herauszufinden, was bei einem Fehler passiert ist. Perforce hilft dir nachzuvollziehen, was du und dein Team am Spiel verändert habt.
Nehmen wir wieder die Tür als Beispiel. Build 120 funktioniert. Anschließend programmierst du die automatische Türöffnung und speicherst die zugehörigen Änderungen über Perforce. Danach erzeugst du Build 121.
Beim Testen stürzt Build 121 beim Öffnen der Tür ab. Sentry registriert diesen Crash. Im Stack Trace erkennst du, dass Funktionen rund um das Öffnen der Tür unmittelbar vor dem Absturz ausgeführt wurden. Damit weißt du noch nicht sicher, was den Fehler verursacht. Du weißt aber, wo du suchen solltest.
Über Perforce kannst du nun nachvollziehen, welche Änderungen an den betreffenden Dateien vorgenommen wurden und welche davon im neuen Build stecken.
Statt lediglich „Mein Spiel stürzt ab“ bekommst du einen wesentlich konkreteren Ausgangspunkt: „Mein Spiel stürzt beim Ausführen der Türfunktion ab. Diese Funktion wurde seit dem letzten funktionierenden Build verändert. Also untersuche ich diese Änderungen genauer.“
Was sind verdächtige Änderungen?
Sentry kann im Zusammenspiel mit der Versionsverwaltung dabei helfen, Änderungen zu identifizieren, die mit einem aufgetretenen Fehler zusammenhängen könnten. Dabei kann dir der Begriff Suspect Commit begegnen. Im Zusammenhang mit Perforce geht es entsprechend um möglicherweise relevante Änderungen beziehungsweise Changelists.
„Verdächtig“ bedeutet nicht, dass diese Änderung den Absturz definitiv verursacht hat. Du bekommst vielmehr einen Hinweis darauf, welche Änderung du zuerst untersuchen solltest.
Was ist ein Code Review?
Hast du eine möglicherweise problematische Änderung gefunden, kannst du den betreffenden Programmcode überprüfen. Diese systematische Überprüfung bezeichnet man als Code Review.
Dabei kontrollierst du beispielsweise, ob die Änderung wie vorgesehen funktioniert, ob du eine bestimmte Situation übersehen hast oder ob deine neue Programmierung andere Teile des Spiels beeinflusst.
Arbeitest du in einem Team, kann ein anderes Teammitglied deinen Code überprüfen. Ein zweites Paar Augen entdeckt möglicherweise einen Fehler, den du selbst beim Programmieren übersehen hast.
Was ist P4 Code Review?
Perforce bietet für diesen Teil des Arbeitsablaufs P4 Code Review. Damit kannst du Änderungen am Programmcode ansehen, kommentieren und gemeinsam mit anderen überprüfen.
Die Verbindung mit Sentry soll den Weg zwischen Fehler und Code verkürzen. Statt einen Crash in einem System zu untersuchen und anschließend unabhängig davon nach den entsprechenden Änderungen zu suchen, lassen sich Informationen miteinander verbinden. Du gelangst dadurch schneller vom auftretenden Problem zu der Änderung, die du tatsächlich untersuchen musst.
Der komplette Ablauf an einem Beispiel
Du entwickelst ein Spiel mit Unreal Engine. Dein Spieler besitzt einen Schlüssel und soll damit eine verschlossene Tür öffnen können.
Du programmierst die Funktion und speicherst deine Änderungen über Perforce P4. Perforce protokolliert, was du verändert hast. Zusammengehörende Änderungen fasst du in einer Changelist zusammen.
Anschließend erzeugst du Build 121. Aus dem aktuellen Stand deines Projekts entsteht damit eine lauffähige Version des Spiels.
Du startest den Build und testest die neue Tür. Das Spiel stürzt ab.
Sentry registriert den Crash und sammelt technische Informationen. Im Stack Trace siehst du, welche Funktionen unmittelbar vor dem Absturz aufgerufen wurden. Die Informationen führen dich zum Bereich der Türsteuerung.
Jetzt nutzt du Perforce P4. Dort kannst du nachvollziehen, welche Änderungen an den betreffenden Dateien vorgenommen wurden. Du stellst beispielsweise fest, dass die Türfunktion seit Build 120 verändert wurde. Da Build 120 noch funktionierte, ist diese Änderung für deine Fehlersuche besonders interessant.
Über P4 Code Review untersuchst du den geänderten Programmcode. Du entdeckst beispielsweise, dass deine neue Funktion nicht berücksichtigt, was passieren soll, wenn eine benötigte Information fehlt.
Du korrigierst den Code und speicherst die Korrektur wieder über Perforce. Anschließend erzeugst du Build 122 und testest die Tür erneut.
Sie öffnet sich und dein Spiel läuft weiter. Zusätzlich kannst du beobachten, ob Sentry denselben Crash erneut registriert. Bleibt er aus, spricht das dafür, dass deine Korrektur das Problem behoben hat.
Was ist Unreal Engine?
Unreal Engine ist eine Spiele-Engine von Epic Games. Eine Spiele-Engine stellt dir grundlegende technische Systeme und Entwicklungswerkzeuge zur Verfügung, auf denen du dein Spiel aufbauen kannst. Dazu gehören beispielsweise die Darstellung der Spielwelt, Physik, Audio und Werkzeuge zur Gestaltung von Levels.
Du musst diese grundlegenden Systeme dadurch nicht für jedes Spiel vollständig selbst programmieren. Perforce lässt sich in den Entwicklungsablauf eines Unreal-Engine-Projekts integrieren. Sentry wiederum kann Informationen über Fehler in einem solchen Spiel liefern.
Welche Rolle spielt ArenaNet?
Beim angekündigten Workshop taucht neben Sentry und Perforce außerdem ArenaNet auf. ArenaNet ist kein weiteres Debugging-Werkzeug, sondern ein Spieleentwicklungsstudio. Bekannt ist es vor allem durch Guild Wars und Guild Wars 2.
Damit kommt die praktische Perspektive hinzu. Sentry und Perforce stehen für die technischen Werkzeuge und deren Funktionen. ArenaNet bringt Erfahrungen aus der tatsächlichen Spieleproduktion in den gemeinsamen Workshop ein.
Was bedeutet „Closing the Debug Loop“?
Damit erklärt sich schließlich der Titel des Workshops „Closing the Debug Loop in Unreal Engine: From Crash to Code Review“.
Ein Fehler soll nicht nur registriert werden. Du verfolgst ihn bis zu seiner möglichen Ursache, untersuchst die entsprechende Änderung, korrigierst den Fehler und kontrollierst anschließend, ob deine Korrektur funktioniert.
Der Kreislauf sieht vereinfacht so aus: Dein Spiel stürzt ab → Sentry erfasst den Crash → der Stack Trace hilft dir bei der Suche nach der Problemstelle → Perforce zeigt dir die Änderungsgeschichte → du untersuchst die möglicherweise verantwortliche Changelist → P4 Code Review unterstützt dich bei der Überprüfung → du korrigierst den Fehler → du erzeugst einen neuen Build → du testest erneut → Sentry zeigt dir, ob der Fehler weiterhin auftritt.
Weitere Artikel auf Games und Lyrik:
