【C#.NET解説】Debugクラスの使い方と基本機能を徹底解説

2024年12月9日月曜日

キーワード(構文) 基本 制御フロー

t f B! P L

名前空間 System.Diagnostics

Debug

自己紹介

夢と現実の狭間を司る存在がここで案内役を務めさせていただきます。.NETの世界で「Debug」クラスはプログラムの内部動作を明らかにし、バグや問題点を発見するための強力なツールです。このクラスを使いこなせば、夢を見ているかのようにスムーズなデバッグ体験が得られるでしょう。

基本機能

Debugクラスの基本機能は、デバッグ時にのみ情報を出力することです。これにより、本番環境では出力されずに済む重要なメッセージをログに記録できます。

C#

using System.Diagnostics;

class Program
{
    static void Main()
    {
        // デバッグ情報を出力
        Debug.WriteLine("これはデバッグ専用のメッセージです。");
    }
}

このコードを実行すると、デバッグモードでのみコンソールにメッセージが表示されます。

よく使う場面と注意点

Debugクラスは、アプリケーションの動作を調査するための不可欠なツールですが、以下の注意点があります。

本番環境では動作しないため、Debugクラスを使ったコードが実行されなくても問題ないように設計する必要があります。

C#

using System.Diagnostics;

class Program
{
    static void Main()
    {
        int value = 10;

        // 値をチェック value が10の時にウィンドウを表示して異常を出してプログラムを終了させる
        Debug.Assert(value == 9, "値が期待通りではありません。");

        Debug.WriteLine("ここは動作確認中の重要なポイントです。");
    }
}

この例では、Assertを使って条件を確認し、期待通りでない場合に警告を表示します。

DEBUGの内容をファイルに書き込み

Debugクラスの便利なメソッドをいくつか紹介します。ここでは、TextWriterTraceListenerを使用してログをファイルに書き出す方法を説明します。

C#

using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        string app = System.IO.Path.Combine(Application.StartupPath, "debug.log");
        // ファイルリスナーを追加
        using (TextWriterTraceListener fileListener = new TextWriterTraceListener(app))
        {
            // デバッグリスナーにファイルリスナーを追加
            Debug.Listeners.Add(fileListener);

            // デバッグメッセージを書き込み (バッファに蓄積される)
            Debug.WriteLine("This is the first debug message.");
            Debug.WriteLine("This is the second debug message.");

            // ここでデバッグファイル "debug.log" を確認すると、メッセージはまだ書き込まれていません
            Console.WriteLine("Messages are written to buffer. Check debug.log now, it should be empty.");

            // バッファに蓄積されたデバッグ出力を即座に書き出す
            Debug.Flush();

            // ここでデバッグファイル "debug.log" を確認すると、メッセージが書き込まれています
            Console.WriteLine("Debug.Flush() called. Check debug.log now, it should contain messages.");
        }
    }
}

Debug.WriteLine は通常即時にデバッグリスナー(例えば、Visual Studioの出力ウィンドウなど)に書き込まれます。
しかし、デバッグリスナーがファイルやネットワークリソースなどバッファリングを伴うものである場合、Debug.Flush を使用することでバッファに蓄積された出力を強制的に書き出すことができます。
つまり、Debug.WriteLine を使用しても、標準的な出力先(例えば、コンソールやVisual Studioの出力ウィンドウ)では即時に出力が反映されます。
しかし、TextWriterTraceListener などのバッファリングを行うリスナーを使用している場合、Flush を呼び出さない限り、出力がバッファに蓄積されたままになり、実際の出力先には反映されないことがあります。

他の使い方

ここではDebug.IndentとDebug.Unindentを使用したコード例を示します。これにより、ログ出力を階層化できます。

C#

using System.Diagnostics;

class Program
{
    static void Main()
    {
        Debug.WriteLine("開始");

        Debug.Indent();
        Debug.WriteLine("ネストされたメッセージ");

        Debug.Unindent();
        Debug.WriteLine("終了");
    }
}

このコードにより、ログの可読性を向上させることができます。

以上、夢のように簡単なDebugクラスの解説でした!

このブログを検索

QooQ