VB6のDebug.Printメソッドは、指定した文字列をイミディエイトウィンドウに出力するメソッドで、デバッグで変数の中身を確認したいときなどに利用されます。.NET FrameworkでVB6のDebug.Printメソッドと同様の機能は、System.Diagnostics名前空間にあるDebugクラスのWriteLineメソッドということになりそうです。.NET Framework 2.0からはそのものズバリのDebug.Printメソッドも使えるようになりましたが、これはDebug.WriteLineメソッドと同じです。
Debug.WriteLineメソッドは、指定した文字列を一行で(文字列の末尾に改行文字列を付けて)、通常Visual Studioの「出力ウィンドウ」に出力します。出力ウィンドウは、Visual Studioのメニュ「表示」-「出力」(キーでは、Ctrl+Alt+O)で表示できます。
補足:出力先は変更することができます。その方法は、「TraceやDebugのWriteメソッドでファイルに出力する」で説明しています。
DebugクラスにはWriteLineの他にも似たメソッドとして、Write(改行しないで出力)、WriteIf(条件により出力)、WriteLineIf(条件により一行を出力)などもあります。
以下にDebugクラスを使った例を幾つか示します。
'出力ウインドウにメッセージを一行表示する System.Diagnostics.Debug.WriteLine("スタート!") 'インデントする System.Diagnostics.Debug.Indent() 'GetCommandLineArgs().Lengthが1より大きい時にメッセージを一行表示する System.Diagnostics.Debug.WriteLineIf( _ Environment.GetCommandLineArgs().Length > 1, "コマンドラインあり") 'アンインデントする System.Diagnostics.Debug.Unindent()
//出力ウインドウにメッセージを一行表示する System.Diagnostics.Debug.WriteLine("スタート!"); //インデントする System.Diagnostics.Debug.Indent(); //GetCommandLineArgs().Lengthが1より大きい時にメッセージを一行表示する System.Diagnostics.Debug.WriteLineIf( Environment.GetCommandLineArgs().Length > 1, "コマンドラインあり"); //アンインデントする System.Diagnostics.Debug.Unindent();
上記のコードを実行すると、例えば、次のように出力されます。
スタート! コマンドラインあり
Debugクラスと似たクラスにTraceクラスがあります。DebugクラスはDEBUGシンボルが定義されている時だけ有効ですが、TraceクラスはTRACEシンボルが定義されている時だけ有効です。通常デバッグビルド(ソリューション構成が「Debug」)ではDEBUGとTRACEの両方が定義されますが、リリースビルド(ソリューション構成が「Release」)ではTRACEのみ定義されます。よって通常は、Debugクラスはデバッグビルドでのみ有効で、Traceクラスはデバッグビルドとリリースビルドの両方で有効です。
シンボルを定義する方法については「デバッグビルドでのみ特定のコードがコンパイルされるようにする」で詳しく説明していますので、そちらをご覧ください。
補足:DebugクラスとTraceクラスのすべてのメソッド(Trace.Refreshメソッドは除く)には、Conditional属性が適用されています。Conditional属性については、「デバッグビルドでのみ特定のコードがコンパイルされるようにする」をご覧ください。
Debug.Writeメソッドを呼び出したのに出力ウィンドウに何も表示されない場合は、以下の点をご確認ください。
Visual Studioの設定によっては、出力がイミディエイトウィンドウに表示されている場合があります。イミディエイトウィンドウは、メニューの「デバッグ」-「ウィンドウ」-「イミディエイトウィンドウ」で表示できます。
イミディエイトウィンドウではなく出力ウィンドウに表示させるには、Visual Studioのメニューで「ツール」-「オプション」を選択してオプションダイアログを開き、「デバッグ」-「全般」カテゴリにある「出力ウィンドウの文字をすべてイミディエイトウィンドウにリダイレクトする」を無効にします。
Visual Studioのツールバーにあるソリューション構成(「開始」ボタンの右)が「Debug」になっていることを確認してください。「Release」ではダメです。
また、以下のようなコードでDEBUGシンボルが定義されているか調べることができます。
#If DEBUG Then Console.WriteLine("DEBUGが定義されています") #End If
#if DEBUG Console.WriteLine("DEBUGが定義されています"); #endif
DEBUGシンボルを定義する方法は、「デバッグビルドでのみ特定のコードがコンパイルされるようにする」をご覧ください。
出力ウィンドウを右クリックするとコンテキストメニューが表示されます。ここで、「出力ウィンドウ」という項目にチェックが入っていることを確認してください。チェックがなければ、クリックして有効にしてください。
通常はTrace.Listenersプロパティ(または、Debug.Listenersプロパティ)が返すトレースリスナのコレクションにはDefaultTraceListenerが存在しており、これによって出力ウィンドウに出力されます。何らかの理由でトレースリスナのコレクションからDefaultTraceListener(または、標準出力に出力するトレースリスナ)が削除されていると、出力ウィンドウに何も出力されなくなります。
補足:DefaultTraceListenerはOutputDebugString関数を使ってデバッガにメッセージを送信します。このメッセージは通常、Visual Studioの出力ウィンドウに表示されます。また、このメッセージはDebugViewのようなツールを使っても表示することができます。
トレースリスナについてはここでは詳しく説明しませんので、「TraceやDebugのWriteメソッドでファイルに出力する」をご覧ください。
以下に、トレースリスナのコレクションにDefaultTraceListenerを追加する例を示します。なお、DefaultTraceListenerがすでに追加されているのにまた追加した(重複して追加した)場合は、メッセージが2回出力されるようになります。
'Imports System.Diagnostics 'Trace.Listenersに新しいDefaultTraceListenerを追加する Trace.Listeners.Add(New DefaultTraceListener()) '次のようにConsoleTraceListenerを追加すると、標準出力に出力される 'Trace.Listeners.Add(New ConsoleTraceListener())
//using System.Diagnostics; //Trace.Listenersに新しいDefaultTraceListenerを追加する Trace.Listeners.Add(new DefaultTraceListener()); //次のようにConsoleTraceListenerを追加すると、標準出力に出力される //Trace.Listeners.Add(new ConsoleTraceListener());
「debugging - VB.NET Debug.Print not working, breakpoint disappears」には、プラットフォームターゲットを「x86」から「AnyCPU」にしたら直ったという報告があります。