Content Pipeline debuggen
| Tutorial | |
|---|---|
| Content Pipeline debuggen | |
| Autor | Razer |
| Programmiersprache | C# |
| Kategorie | XNA Tutorials |
| Diskussion | Thread im Forum |
| Lizenz | indiedev article license |
Um die Content Pipeline zu debuggen gibt es zwei Varianten, je nachdem was einem lieber ist. Mit "Content Pipeline" meine ich hiermit jedoch ausschließlich die ContentImporter, ContentProcessors sowie ContentTypeWriters, denn die ContentTypeReader sind sowieso im Spiel enthalten und können dort bestens gedebuggt werden.
Variante 1 - Projekt-Template
Zu dieser Variante gibt es nicht viel zu sagen. Mit dieser Variante lädt man sich ein Projekt-Template herunter, welches man seiner Solution hinzufügt. In dem Template ändert man dann lediglich zwei Variablen, und sobald man das Projekt per Debugger startet, so erscheint eine Konsole und kurzerhand hält Visual Studio am gesetzten Breakpoint ein.
Das Template findet ihr hier: Visual Studio Gallery. Eine Anleitung ist nicht nötig, was ihr machen müsst wird per "TODO:"-Kommentar in der Program.cs des Projekts gesagt (mit Beispiel - narrensicher, falls doch benötigt: BadCorporateLogo). Ihr müsst dann nur noch in einer der oben genannten Komponente die ihr debuggen wollt einen Breakpoint setzen und das Template-Projekt per Debugger starten (Rechtsklick auf Projekt -> Debugging -> Eine neue Instanz starten).
Variante 2 - Zweite Visual Studio Instanz als Debugger nutzen
Bitte die unten genannten Warnungen durchlesen um Probleme zu vermeiden!
Als Alternative zur oben genannten Methode könnt ihr auch Visual Studio in seiner Funktionsvielfalt nutzen. Denn Visual Studio ist in der Lage sich selbst zu debuggen. Durch Anhängen an die erste Instanz könnt ihr Visual Studio und somit dem Build-Prozess einen Debugger anhängen.
Ihr geht dabei wie folgt vor:
- Setzt ein System.Diangostics.Debugger.Break(); an die "Breakpoint"-Stelle im Code, wo ihr unterbrechen wollt
[ContentImporter(".gol", DisplayName = ".GOL Importer", DefaultProcessor = null)]
public class GOLImporter : ContentImporter<RawMap>
{
/// <summary/>
/// <param name="filename">Name of a game asset file.</param><param name="context">Contains information for importing a game asset, such as a logger interface.</param>
public override RawMap Import(string filename, ContentImporterContext context)
{
System.Diagnostics.Debugger.Break();
StreamReader reader = new StreamReader(filename);
string lineInfo = reader.ReadLine();
string[] data = lineInfo.Split('.');
byte[,] _map = new byte[Convert.ToInt32(data[0]),Convert.ToInt32(data[1])];
int y = 0;
while (reader.Peek() >= 0)
{
string line = reader.ReadLine();
for (int chIndex = 0; chIndex < line.Length; chIndex++)
_map[chIndex, y] = Convert.ToByte(Convert.ToString(line[chIndex]));
y++;
}
return new RawMap {Map = _map};
}
}
- Startet eine zweite Instanz von Visual Studio
- Klickt auf Extras -> An den Prozess anhängen ...
- Wählt unten in der Liste "devenv.exe" aus (steht normal euer Solution-Titel dabei)
- Klickt auf anhängen
- Erstellt in der ersten Instanz von Visual Studio nun euer Projekt
ACHTUNG
- Wenn ihr auf "Debuggen beenden" geht solange der Buildprozess pausiert ist, stürzt Visual Studio ab. Klickt deshalb bitte auf Debugging starten (der grüne Pfeil), bis der Prozess wieder läuft
- Löscht das System.Diagnostics.Debugger.Break() wieder raus und startet nie den Buildvorgang wenn keine VS-Instanz dranhängt, sonst stürzt Visual Studio ab
- Breakpoints funktionieren beim Anhängen leider nicht (ich hab vor einiger Zeit ein Tutorial auf MSDN gefunden wie das mit Anhängen und Breakpoints geht - finde es aber nicht mehr. Falls doch werde ich es hier ergänzen, denn das System mit Break() ist leider nicht das schönste)