.NET TIPS

デバッグ・メッセージをコンソールに出力するには?

デジタルアドバンテージ
2004/04/02

 「TIPS:VS.NETでデバッグ・メッセージを出力するには?」で解説しているように、Debugクラス(System.Diagnostics名前空間)によるデバッグ・メッセージの出力は、Visual Studio .NETの使用時にはVS.NETの[出力]ウィンドウに出力される。

 しかし、Visual Studio .NETではなくコマンド・プロンプトでコンソール・アプリケーションのプログラミングを行っている場合には、Debugクラスによる出力を表示することができない。このような場合には、Debugクラスに「リスナ」を追加することにより、コンソール(標準出力)やファイルなどにもメッセージを出力することができる。

デバッグ・メッセージを受け取るリスナ

 Debugクラスで使用されるリスナ(Listener)とは、Debugクラスからデバッグ・メッセージを受け取って、それをコンソール(標準出力)やファイルなどに出力するオブジェクトのことである。

 具体的には、リスナはTraceListenerクラス(System.Diagnostics名前空間)を継承したクラスのオブジェクトであり、クラス・ライブラリには、受け取ったメッセージをファイルやコンソールに書き込むTextWriterTraceListenerクラス、Windowsのイベント・ログに書き込むEventLogTraceListenerクラスなどが用意されている。

 一方、DebugクラスはListenersプロパティのコレクションにより、複数のリスナを登録することができる。そして、WriteメソッドやWriteLineメソッドによりメッセージが出力される場合には、Listenersプロパティに登録されているすべてのリスナに対して、そのメッセージが出力される仕組みとなっている。

デバッグ・メッセージをコンソールに出力

 コンソールにデバッグ・メッセージを出力するには、前出のTextWriterTraceListenerクラスのコンストラクタで標準出力のストリームを指定してリスナを生成し、それをDebugクラスのListenersプロパティに追加すればよい(この設定はプログラムの最初に1度だけ行えばよい)。これを行っているサンプル・プログラムを次に示す。

// debugoncon.cs

using System;
using System.Diagnostics;

public class DebugOnConsole {
  static void Main() {
    Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
    Debug.WriteLine("デバッグ・メッセージを出力");
  }
}

// コンパイル方法:csc /d:DEBUG debugoncon.cs
デバッグ・メッセージを出力するC#のコンソール・アプリケーション(debugoncon.cs)
 
' debugoncon.vb

Imports System
Imports System.Diagnostics

Class DebugOnConsole
  Shared Sub Main()
    Debug.Listeners.Add(New TextWriterTraceListener(Console.Out))
    Debug.WriteLine("デバッグ・メッセージを出力")
  End Sub
End Class

' コンパイル方法:vbc /r:System.dll /d:DEBUG=1 debugoncon.vb

デバッグ・メッセージを出力するVB.NETのコンソール・アプリケーション(debugoncon.vb)

 Visual Studio .NETのDebugビルドによりこのプログラムを実行する場合には、デバッグ・メッセージはコンソールに出力されるが(同時に[出力]ウィンドウにも出力される)、コマンド・プロンプトでコンパイルする場合には、「DEBUGシンボル」を定義しておく必要がある。これには、リストの最後のコメントで記述しているように、コンパイラの/defineオプション(省略形は/d)により「DEBUG」を定義しなければならない。あるいは、コンパイル・オプションの代わりに、C#では「#define DEBUG」、VB.NETでは「#CONST DEBUG=1」の1文をプログラムの先頭に追加してもよい。DEBUGシンボルが定義されていなければ、Debugクラスのメソッド呼び出しはコンパイラによって取り除かれるため、デバッグ・メッセージは出力されない。

 コンソールではなく、特定のファイルにデバッグ・メッセージを出力したい場合には、ファイルに対するストリームからTextWriterTraceListenerオブジェクトを生成すればよい。しかし、この場合にはもっと簡単な方法がある。これについては「TIPS:デバッグ・メッセージをファイルに出力するには?」で解説している。End of Article

カテゴリ:クラス・ライブラリ 処理対象:デバッグ&トレース
使用ライブラリ:Debugクラス(System.Diagnostics名前空間)
使用ライブラリ:TraceListenerクラス(System.Diagnostics名前空間)
使用ライブラリ:TextWriterTraceListenerクラス(System.Diagnostics名前空間)
関連TIPS:VS.NETでデバッグ・メッセージを出力するには?
関連TIPS:デバッグ・メッセージをファイルに出力するには?

この記事と関連性の高い別の.NET TIPS
デバッグ・メッセージをファイルに出力するには?
VS.NETでデバッグ・メッセージを出力するには?
using文による名前空間の指定を自動的に記述するには?
LINQ to SQLのログ出力をVisual Studioの[出力]ウィンドウに出力するには?
LINQ to SQLにより生成されるSQL文を確認するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

更新履歴
【2004/04/08】 関連TIPSとして「TIPS:デバッグ・メッセージをファイルに出力するには?」についての記述を追加しました。
 
「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Face API (2017/6/27)
     Face APIはマイクロソフトのCognitive Servicesに含まれるAPIの1つで、顔検出/画像のグループ化/人物の特定などの機能を提供する
  • 音声合成APIを使ってC#で読み上げアプリを作成しよう (2017/6/23)
     入力したテキストを基に「音声合成」をC#で行う1つの手法として、docomo Developer supportの音声合成APIを活用する方法を紹介する
  • ループをParallelクラスで並列処理にするには? (2017/6/21)
     Parallelクラスを使って、複数の処理を並列に実行する方法を解説する。また、PLINQを使ったコード例や例外処理を行う上での注意点なども取り上げる
  • WebExtensions (2017/6/20)
     WebExtensionsは、Mozillaが開発を進めているブラウザ拡張機能用API。さまざまなブラウザで動作する拡張機能を作成できる
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH