デバッグビルドでのみ特定のコードがコンパイルされるようにする
条件付きコンパイル定数を使用する
デバッグの時のみテストのためのコードを挿入したいといったケースがよくあります。そのような時に、リリースでビルドする前に手作業でそのコードを削除していたのでは面倒なだけでなく、バグの原因ともなります。
このようなケースではプリプロセッサディレクティブを使うと便利です。次のコードでは、デバッグバージョンでビルドされた時のみ「Console.WriteLine...」コードがコンパイルされます。
#If DEBUG Then
Console.WriteLine("デバッグバージョンです。")
#End If
#if DEBUG
Console.WriteLine("デバッグバージョンです。");
#endif
上のコードはDEBUGコンパイラディレクティブが有効な時に「Console.WriteLine...」コードがコンパイルされるようにするものです。Visual Studioではデフォルトで、デバッグビルドにおいてDEBUGディレクティブが有効になり、リリースビルドでは無効になるため、上記のような使い方が可能になります。(これを変更する方法は後ほど説明します。)
デバッグのときのみメソッドを有効にする
また、メソッドについて同様の事を行うには、Conditional属性を使用します。次の例ではShowMessageメソッドは条件付きメソッドとなり、DEBUGディレクティブが有効な時のみメソッドの呼び出しがコンパイルされます。なお、Conditional属性を指定する際、そのメソッドはvoid型の戻り値(戻り値なし)である必要があります。
<Conditional("DEBUG")> _
Public Shared Sub ShowMessage(ByVal str As String )
Console.WriteLine(str)
End Sub
[Conditional("DEBUG")]
public static void ShowMessage(string str)
{
Console.WriteLine(str);
}
デバッグのときのみ出力する
さらに、簡単な情報の出力等だけならば、Debugクラスを使う方法もあります。詳しくはこちら をご覧ください。
DEBUGディレクティブの有効、無効を変更する
構成別のDEBUGディレクティブの有効、無効はVisual Studioの設定により変更することができます。メニューの「プロジェクト」-「...のプロパティ」で表示される「プロパティページダイアログ」の「構成プロパティ」-「ビルド」を選択し、「コード生成」-「条件付きコンパイル定数」に"DEBUG"があればDEBUGディレクティブは有効となり、無ければ無効になります。
補足:Visual Studioを使わない場合は、/defineオプションにより、設定ができます。(例:/define:DEBUG)
さらに、コード内で#defineプリプロセッサディレクティブ(VB.NETでは#Const)により定義することもできます。#defineディレクティブはファイルの先頭に記述します。なお逆に未定義にするには、#undefを使用します(VB.NETでは「#Const BEDUG = False」のようにする)。
#If DEBUG Then
Console.WriteLine("デバッグバージョンです。")
#End If
#if DEBUG
Console.WriteLine("デバッグバージョンです。");
#endif
補足:
今までの説明ではDEBUGディレクティブのみ使用しましたが、目的に応じてこのような条件付きコンパイル定数(シンボル)を自分で定義し、使用することももちろんできます。そのときの定義及び使用方法は今まで説明したとおりです。
また、今までは
#if ...
#endif
のみを使用してきましたが、
#if ...
#elif ...
#else
#end if
といった使い方も出来ます。
#If DEBUG Then
Console.WriteLine("デバッグバージョンです。")
#ElseIf TRACE Then
Console.WriteLine("TRACEが定義されています。")
#Else
Console.WriteLine("DEBUGもTRACEも定義されていません。")
#End If
#if DEBUG
Console.WriteLine("デバッグバージョンです。");
#elif TRACE
Console.WriteLine("TRACEが定義されています。");
#else
Console.WriteLine("DEBUGもTRACEも定義されていません。");
#endif