WisdomSoft - for your serial experiences.

デバッグ

XNA Framework ゲームの開発過程で、製品版のパフォーマンスに影響を与えることなく、デバッグ用の文字列を出力する方法を紹介します。

テキストの出力

どのような環境でも、開発者にとって Hello World に相当する文字列の出力は自分が書いたコードが意図したとおりに動いたのかどうかを確認するための重要な機能です。Visual Studio のデバッガを使えば、実行時の変数の値など、より高級な情報を得ることができますが、それでもデバッグ用に文字を出力できるというのは開発者の助けとなります。

XNA Framework ゲームを XNA Game Studio で開発するのであれば System.Diagnostics 名前空間の機能を使うと便利です。この名前空間はイベントログやパフォーマンスカウンタなどにアクセスするクラスを提供しています。この中に Visual Studio のデバッグ構成でビルドされたアセンブリで有効になるデバッグ機能にアクセスする System.Diagnostics.Debug クラスが提供されています。

System.Diagnostics.Debug クラス
public sealed class Debug

このクラスはデバッグ機能に関する静的メンバを公開しています。この中に、文字列を出力する Write() メソッドWriteLine() メソッドが用意されています。WriteLine() メソッドは出力された文字列の末尾に、自動的に改行文字を追加します。

Debug クラス Write() メソッド
[ConditionalAttribute("DEBUG")] 
public static void Write (string message)
Debug クラス WriteLine() メソッド
[ConditionalAttribute("DEBUG")] 
public static void WriteLine (string message)

message パラメータに渡した文字列は、Debug クラスに登録されているリスターに出力されます。XNA Game Studio からゲームを実行している場合、Visual Studio の「出力」ウィンドウに結果が表示されます。

コード1
using System.Diagnostics;
using Microsoft.Xna.Framework;

class Test
{
    static void Main(string[] args)
    {
        using (Game game = new Game())
        {
            Debug.WriteLine("Game Begin");
            game.Run();
            Debug.WriteLine("Game End");
        }
    }
}
実行結果
コード1 実行結果

コード1はゲームの開始直前と終了直後に Debug クラスの WriteLine() メソッドで文字列を出力しています。実行結果のように Visual Studio の「出力」ウィンドウに表示されることが書く勤できます。

なお Debug クラスはリリース構成でビルドした場合は機能しません。パフォーマンスやサイズに影響を与えることなく、デバッグ用のコードを含めておくことができます。