広告あり

【C#】デバッグ時のみ実行する処理の書き方

C#

C#で開発環境やテスト用のコードをデバッグ(Debug)時のみ実行して、通常時には実行されないような処理の書き方について紹介させていただきます。デバッグ時のみ実行する方法は、Conditional属性を使う方法と、プリプロセッサディレクティブを使う方法がありますが、前者は使える場面が限られてくるため、後者の方法を解説していきます。

[スポンサーリンク]

プリプロセッサディレクティブを使った書き方

public void DemoMethod()
{
    // 何らかの処理

#if DEBUG
    Console.WriteLine("デバッグ時に実行する処理");
#else
    Console.WriteLine("デバッグ以外で実行する処理");
#endif

    // 何らかの処理
}

仕組みとしては、条件付きコンパイルの制御#if#else#endif)を使用して、DEBUGシンボルが定義されているかどうかで、C#コンパイラにコンパイルさせる処理を変更します。(Visual Studioの初期設定では、Debug構成でビルド/実行するとDEBUGシンボルが自動的に定義されます。)

  • #if DEBUG
     DEBUGシンボルが定義されている場合のみコンパイルされる。
  • #else
     #if で指定した条件を満たさない場合のみコンパイルされる。デバッグ時のみに何か処理をしたい場合には #if のみを書いて #else は省略できる
  • #endif
     条件付きコンパイルを閉じる。

上記の例のような処理の間だけでなく、#if#endifでメソッド自体を囲んだりクラス全体を囲むことでメソッドやクラス全体をデバッグ実行時のみ実行されるように指定することも可能です。

より実用的な書き方

internal static class BuildState
{
    // デバッグ実行かどうか
    public static bool IsDebug =>
#if DEBUG
    true;
#else
    false;
#endif
}

// ~~~~~~~~~~~~~~~~~~~~

public void DemoMethod()
{
    // 何らかの処理

    if(BuildState.IsDebug)
    {
        Console.WriteLine("デバッグ時に実行する処理");
    }
    else
    {
        Console.WriteLine("デバッグ以外で実行する処理");
    }

    // 何らかの処理
}

プリプロセッサディレクティブは、何度も書くのが面倒で見にくくなってしまううえ、コンパイルされない側のコードがVisual Studioで認識されなくなるので、大変不便です。そこで、上記のようにプリプロセッサディレクティブを1つのクラス(BuildState)にまとめます。そうすると、使用する際は通常のif文として使用できます。(通常のif文なので当然Visual Studioにも認識されます。)

ただし、この場合、メソッドやクラスを囲むような使い方はできませんので、メソッドやクラスを囲む場合はプリプロセッサディレクティブを直接書いて対応してください。

まとめ

今回は、C#でデバッグ実行時のみ実行する処理の書き方を解説させていただきました。開発時やテストで使用するデバッグ用コードはしっかりと切り分けておかないとバグの原因にもなりかねません。今回紹介した方法で、デバッグ実行時のみ動作するように切り分けて対応しておきましょう。


\ おすすめ書籍 /



[スポンサーリンク]

\ おすすめ書籍 /



この記事を書いた人
だんご丸

鉄鋼系SE歴 10年
金融系SE歴  6年
現在は音楽出版社のSE

●保有資格
初級システムアドミニストレータ
(現:ITパスポート)
基本情報技術者
応用情報技術者
情報セキュリティスペシャリスト
(現:情報処理安全確保支援士)
ネットワークスペシャリスト
情報セキュリティマネジメント
AWS認定クラウドプラクティショナー
AWS認定ソリューションアーキテクト - アソシエイト

だんご丸をフォローする
C#
[スポンサーリンク]
[スポンサーリンク]
だんご丸をフォローする
[スポンサーリンク]
タイトルとURLをコピーしました