「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
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
debugoncon.vbのダウンロード
Visual Studio .NETのDebugビルドによりこのプログラムを実行する場合には、デバッグ・メッセージはコンソールに出力されるが(同時に[出力]ウィンドウにも出力される)、コマンド・プロンプトでコンパイルする場合には、「DEBUGシンボル」を定義しておく必要がある。これには、リストの最後のコメントで記述しているように、コンパイラの/defineオプション(省略形は/d)により「DEBUG」を定義しなければならない。あるいは、コンパイル・オプションの代わりに、C#では「#define DEBUG」、VB.NETでは「#CONST DEBUG=1」の1文をプログラムの先頭に追加してもよい。DEBUGシンボルが定義されていなければ、Debugクラスのメソッド呼び出しはコンパイラによって取り除かれるため、デバッグ・メッセージは出力されない。
コンソールではなく、特定のファイルにデバッグ・メッセージを出力したい場合には、ファイルに対するストリームからTextWriterTraceListenerオブジェクトを生成すればよい。しかし、この場合にはもっと簡単な方法がある。これについては「TIPS:デバッグ・メッセージをファイルに出力するには?」で解説している。
カテゴリ:クラス・ライブラリ 処理対象:デバッグ&トレース
使用ライブラリ:Debugクラス(System.Diagnostics名前空間)
使用ライブラリ:TraceListenerクラス(System.Diagnostics名前空間)
使用ライブラリ:TextWriterTraceListenerクラス(System.Diagnostics名前空間)
関連TIPS:VS.NETでデバッグ・メッセージを出力するには?
関連TIPS:デバッグ・メッセージをファイルに出力するには?
Copyright© Digital Advantage Corp. All Rights Reserved.