.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#におけるDebug.Printとは?C#Debug.PrintとWriteLineの違いについて紹介!

C#におけるDebug.Printとは?C#Debug.PrintとWriteLineの違いについて紹介!

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#におけるDebug.Printとは?C#Debug.PrintとWriteLineの違いについて紹介!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    システム
    エンジニア
    DebugとConsole、TraceクラスのWriteLineはどこが違うのですか。
    プロジェクト
    マネージャー
    それぞれ出力の用途が異なります。

    C#におけるDebug.Printとは


    C#におけるDebug.Printとは、デバッグ時に使用する.NET内のメソッドです。プログラミングの要所でチェックのために記述します。このメソッドを呼び出すと出力ウインドウで文字列が表示されます。

    製品用にビルドした時はDebugクラスは無視されてなくなってしまうことが特徴です。これによって製品版では必要のない確認のためのコードを気軽に追加することができます。

    このメソッドを呼び出しても何も表示されない場合は「出力元」の選択がデバッグになっていない可能性があります。またリリースモード状態でも表示されないため、リリースモードになっている時はデバッグモードに切り替えましょう。

    C#ならどんな開発環境でも使える?

    基本的な.NETのクラスのメソッドなので最近の開発環境では殆どのバージョンに対応しています。

    対応しているバージョンはNET5.0、.NET Core2.0, 2.1, 2.2, 3.0, 3.1、.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8、.NET Standard 2.0, 2.1、Xamarin.Android 7.1、Xamarin.iOS 10.8、Xamarin.Mac 3.0などです。

    実際にDebug.Printを呼び出すのは簡単です。
    WebなどでUsingを使わずに呼び出す場合は名前空間を直接書きます。
    C#
    ______

    System.Diagnostics.Debug.Prnt("デバッグ時にこの文字列が表示されます。”) ;

    ______

    アプリケーションを作る場合も直接名前空間を書いても良いですが、使用頻度が高いのでUsingを使って呼び出すことがほとんどではないでしょうか。
    以下のように名前空間を書いて呼び出しましょう。

    C#
    ______

    using System.Diagnostics;

    class Debug.Test
    {
    static void Main()
    {
    Debug.Print("ここに書いた文字列がデバッグ時に出力されます。");
    }
    }

    PrintとWriteLineとConsoleやTraceの違いは?

    Debug.PrintとDebug.WriteLine、Console.WriteLine、Trace.WriteLine、どれも似ているので混在してしまい、初心者のうちは結果が出力されてしまえばどちらでもいいような気がしてしまうので混在しがちです。

    しかし、ConsoleとTraceに関しては使い方が違うのでここは混在せずに用途を覚えておくといいでしょう。

    C#におけるDebugとConsoleとTraceの違いとは

    これらの違いは簡単です。

    『デバッグするときにしか使わない出力はDebug.PrintやDebug.Write Line』を使い、『プログラムとして標準出力に表示する場合はConsole.WriteLine』を使い、『詳細なログを制作するときにはTrace.WriteLine』を使うという用途の違いがそれぞれ存在します。

    どのメソッドもWriteLineと名付けられているため同じようなものに見えてしまいますが、明確にこのような違いがあるので共同で保守性を求める必要のあるプロの開発者を目指しているのであればぜひ覚えておきましょう。

    例えば以下のようなコードを書いてデバッグモードとリリースモードを切り替えてみたりすると違いがわかると思います。

    C#
    ______

    using System;
    using System.Diagnostics;

    class DebugTest
    {
    static void Main()
    {
    Debug.Print("ここに書いた文字列がデバッグ時に出力されます。");
    Console.WriteLine("こちらの文字列はリリース時もデバッグ時にも出力されます。");
    Trace.WriteLine("この文字列もリリース時もデバッグ時にも出力されます。");
    Debug.WriteLine("この文字列はデバッグ時のみ出力されます。");
    }
    }

    ———

    これではトレースの違いがわからないと思いますが、トレースとは「痕跡」という意味があります。他の言語でもトレースは一般的に細かい追跡情報(ログ)を制作したいときに使われ、深刻なエラーを表示するような場合とは使い分けてトレースを使ったりします。

    トレースクラスはこのような概念から生まれたものです。

    他にはトレース情報のみを別のテキストファイルに出力することもあります。(こういったことはデバッグクラスでも可能なのですが、トレースの場合はデバッグクラスとは異なり、リリース時も使用できます)

    C#ではコードの先頭に#undef TRACEを追加するとトレースを無効にすることも可能です。(デバッグもデバッグ時に出力を無効にすることもできます)

    C#
    ______

    #undef TRACE

    using System;

    public class TestTrace
    {
    static void Main()
    {
    #if (TRACE)
    Console.WriteLine("この場合出力されません!.");
    #endif
    }
    }

    ———

    なお今回は文字列だけを書いていますが、実際にトレースを使うときには一般的には発生日時などを一緒に記入することが多いです。

    DebugではなくConsole.WriteLineに統一した方がいいの?

    簡単な趣味で作るプログラムではConsoleの方が早いという理由でConsoleに統一するように教わる初学者もいるでしょう。

    しかし、確かにデバッグしているときには出力速度が若干早いのですが、リリース時にはDebugクラスは無視されるという点では処理が起こらないという点で出力がなくなって簡素になりさらに速度が上がるのでこの教え方は.NETの開発の理念としては正しくない考えです。

    一人で作る場合はそれでも構いませんが、共同で誰かと開発するような開発者はできれば使い分けをしましょう。

    ただしC#で競技プログラミングをしている方であれば確かにConsoleに統一した方が良いでしょう。

    C#におけるDebug.Print とDebug.WriteLineの違いは?

    Debug.PrintとDebug.WriteLineの違いとしては引数、オーバーロードの違いがあるのですが、初学者は同じような機能と覚えてしまっても良いです。

    Printの方は文字列(string型)を表示することが前提ですが、WriteLineの方はオブジェクト(object型)のみの記述にも対応している点が異なります。

    同じような機能なのになぜ両方存在するのかという話ですが、恐らく仕様面の歴史的な問題で残っている可能性が高いようです。Printの方が歴史は古いようです。

    どちらを使っても構いませんが、できればどちらかに統一した方が良いでしょう。(個人的にはWriteLineを使うことの方が多いように思います)

    C言語の名残りでC#も初期ではPrintの表記をしていた可能性が高いです。

    WriteLineのLineって何?Writeメソッドもあるけど…

    ここでのLineの意味としてはMicrosoft公式ページでは「行終端記号を追加する」という書き方になっていますが、要するに「改行します」という意味です。

    WriteLineの他にWriteやWriteIf、WriteLineIfなどもあり、それぞれ出力するという用途は似ていますが引数が異なりますので、気になる人は調べてみてください。

    簡単に説明すると、Lineと書いてあれば改行して出力し、書いてなければ改行せずに出力される、Ifと書かれているものはBoolean型に対応していてtrueの時に出力するという違いがあります。

    しかしこのメソッドを使わなくても他にも書き方はあるのでそれほど重要視しなくてもコードを書くことはできるためWriteLineしか知らないという方も多いです。

    システム
    エンジニア
    DebugとConsole、TraceクラスのWriteLineは一見同じような機能でありながらそれぞれ出力の用途がことなるのですか。
    プロジェクト
    マネージャー
    その通りです。使用の際は名前空間を呼び出す必要があります。

    C#Debug.PrintとWriteLineの違いのまとめ

    C#で使用するDebug.Printと各種出力のWriteLineの違いは同じような機能でありながらそれぞれ出力の用途について異なります。

    同じ出力ですが、それぞれのクラスは開発者が使いやすいように考慮して設計されています。たかがデバッグ出力ですが、デバッガーやテストエンジニアなど専門の技術者がいるほど、大規模な開発では重要な作業です。

    それぞれの用途を覚えて効率の良く安全なC#開発ができるように勉強していきましょう。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job